Dynamics 2011(IFD)CRM SOAP更新无效

时间:2016-06-02 10:35:26

标签: php soap dynamics-crm-2011 microsoft-dynamics

我正在使用PHP连接到Dynamics 2011 IFD并成功验证和检索联系人到我的Web应用程序。

但我很难更新联系人。

我的SOAP请求(下面)正在返回“错误请求”,遗憾的是我没有足够的管理员访问权限来启用更有用的错误报告。任何人都可以发现这个XML中可能存在的明显问题吗?

$request = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
          '.$this->crmAuth->GetSoapHeaderOnPremise("Update").'
        <s:Body>
            <Update xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
              <entity xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
                <a:Attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
                  <a:KeyValuePairOfstringanyType>
                    <b:key>contactid</b:key>
                    <b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">'.$contactid.'</b:value>
                  </a:KeyValuePairOfstringanyType>
                  <a:KeyValuePairOfstringanyType>
                    <b:key>firstname</b:key>
                    <b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">'.$firstname.'</b:value>
                  </a:KeyValuePairOfstringanyType>
                  <a:KeyValuePairOfstringanyType>
                    <b:key>lastname</b:key>
                    <b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">'.$lastname.'</b:value>
                  </a:KeyValuePairOfstringanyType>
                </a:Attributes>
                <a:EntityState i:nil="true" />
                <a:FormattedValues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
                <a:Id>'.$contactid.'</a:Id>
                <a:LogicalName>contact</a:LogicalName>
                <a:RelatedEntities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
              </entity>
            </Update>
          </s:Body>
        </s:Envelope>'

'getSoapHeaderOnPremise'函数正在为retrieve / retrieveMultiple请求返回工作auth标头。这里唯一的区别是指定了Update方法:

<a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Update</a:Action>

2 个答案:

答案 0 :(得分:1)

这是一个疯狂的猜测,我自己没有执行过这样的更新。

删除此位,

<a:KeyValuePairOfstringanyType>
     <b:key>contactid</b:key>
     <b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">'.$contactid.'</b:value>
</a:KeyValuePairOfstringanyType>

这表示您正在尝试设置记录ID字段,这不是您通常所做的事情。

您有这一点似乎将您的更新与单个记录相关联,因此我怀疑上述内容不是必需的。

<a:Id>'.$contactid.'</a:Id>

答案 1 :(得分:0)

从未使用它,但看起来有一个project on Git来处理这个问题。