Вызов веб-сервисов из Adobe Acrobat X Javascript - PullRequest
2 голосов
/ 24 октября 2011

Я пытаюсь вызвать веб-сервис SharePoint из Acrobat JavaScript, и я обнаружил ошибку, которую, похоже, не могу обойти. Надеюсь на некоторую помощь в том, что я делаю неправильно, чтобы позвонить на sharepoint. Я видел два способа сделать SOAP-вызов веб-службы:

Путь 1:

var strURL = "http://www.webservicex.net/globalweather.asmx?wsdl";
      var service = SOAP.connect(strURL);
      var sCountryName = "United States";
      var sCityName = "New York";
      var result = {
                  soapType: "xsd:string",
                 CountryName: sCountryName,
                   CityName: sCityName
                   //soapValue:
                  };
      var results = service.GetWeather(result);

Это работает, когда я копирую код напрямую, но когда я пытаюсь заменить его своим кодом, я получаю сообщение об ошибке «служба не определена»:

var strURL = "http://dev-dc:40570/branches/GHIS/XXXXXXX/_vti_bin/lists.asmx?wsdl";
      var service = SOAP.connect(strURL);

      var sPageURL = "http://devdc:40570/branches/GHIS/XXXXXXX/Other%20Client%20Documents/XXXXXXX.pdf";
      var sCheckoutToLocal = "false";
      var sLastModified = "";
      var result = {
                    soapType: "xsd:string",
                    pageURL: sPageURL,
                    checkoutToLocal: sCheckoutToLocal,
                    LastModified: sLastModified
                  };
      var results = service.CheckOutFile(result);

Поскольку это не сработало, я попробовал способ 2 для вызова веб-службы:

var oAuthenticator ={ UsePlatformAuth: "true"};
var cURL = "http://www.webservicex.net/globalweather.asmx";
var oRequest = {"http://www.webserviceX.NET:GetWeather":{CityName:"New York",CountryName:"United States"}};
var cAction = "http://www.webserviceX.NET/GetWeather";
var ver = SOAPVersion.version_1_2;
SOAP.wireDump = "true";
var response = Net.SOAP.request({cURL:cURL,oRequest:oRequest,cAction:cAction,oAuthenticate:oAuthenticator,bEncoded:false,cVersion:ver});

Я получил ошибку с этим стилем, хотя и сказал, что CountryName не было предоставлено. Используя мой код, я получил похожую ошибку о том, что pageUrl отсутствует или недействителен:

var oAuthenticator ={ UsePlatformAuth: "true"};
    var cURL = "http://dev-dc:40570/branches/GHIS/XXXXXXX/_vti_bin/lists.asmx?wsdl";
    var oRequest = {
        "http://schemas.microsoft.com/sharepoint/soap:CheckOutFile":{
            pageUrl:"http://dev-dc:40570/branches/GHIS/XXXXXXX/Other%20Client%20Documents/XXXXXXX.pdf",
            checkoutToLocal:"false",
            lastmodified:""
            }};
    var cAction = "http://schemas.microsoft.com/sharepoint/soap/CheckOutFile";
    var ver = SOAPVersion.version_1_1;
    SOAP.wireDump = "true";
    var response = SOAP.request({
        cURL:cURL,
        oRequest:oRequest,
        cAction:cAction,
        oAuthenticate:oAuthenticator,
        bEncoded:false,
        cVersion:ver
        });

Может кто-нибудь помочь мне понять, почему я не могу вызвать этот веб-сервис SharePoint? Меня не волнует, какой метод я использую, если я могу общаться с веб-сервисом из JavaScript Acrobat. Также, в случае, если это помогает, вот рекомендуемый вызов при переходе к веб-сервису вручную в браузере:

POST /_vti_bin/lists.asmx HTTP/1.1
Host: dev-dc
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <CheckOutFile xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <pageUrl>string</pageUrl>
      <checkoutToLocal>string</checkoutToLocal>
      <lastmodified>string</lastmodified>
    </CheckOutFile>
  </soap12:Body>
</soap12:Envelope>

1 Ответ

1 голос
/ 25 октября 2011

Проведя некоторые эксперименты, я узнал, что вместо использования acrobat для построения части кода, которую вы запрашиваете, вы можете вместо этого передать необработанный XML, и он передаст его точно так, как напечатано. Из-за этого я решил, что sharepoint должен искать конкретный способ структурирования XML. Изменяя код для передачи XML, Sharepoint и Acrobat смогли успешно общаться. Пересмотренный (рабочий) код выглядит так:

/**WebService Call to the Sharepoint Lists service for Checking Out the current document**/
function CheckOutFile(myFileVal){
    var oAuthenticator ={ UsePlatformAuth: "true"};
    var cURL = GetDocLibraryWS(myFileVal.path); 
    var oRequest = {
        soapValue: "<CheckOutFile xmlns='http://schemas.microsoft.com/sharepoint/soap/'>"+
                        "<pageUrl>"+myFileVal.path+"</pageUrl>"+
                        "<checkoutToLocal>false</checkoutToLocal>"+
                        "<lastmodified/>"+
                    "</CheckOutFile>"};
    var cAction = "http://schemas.microsoft.com/sharepoint/soap/CheckOutFile";
    var ver = SOAPVersion.version_1_2;
    var response = SOAP.request({
        cURL:cURL,
        oRequest:oRequest,
        cAction:cAction,
        oAuthenticate:oAuthenticator,
        bEncoded:false,
        cVersion:ver
        });}
/**derives the document library web service path from the file URL**/
function GetDocLibraryWS(myFile){
    var myString = myFile.substring(0,myFile.lastIndexOf("/"));
    myString = myString + "/_vti_bin/Lists.asmx";
    return myString;}
...