我正在为Salesforce.com开发Novell Identity Manager驱动程序,并尝试更好地了解Salesforce.com平台。
迄今为止我取得了非常好的成功。我可以从SFDC中读取几乎任意的对象类,并为它们创建eDirectory对象,什么不可以。这一切都已完成并且工作得很好。 (出版商频道)。一旦我将Query事件映射出来,大多数内容都在发布者频道中开始工作。
我正在努力在eDirectory中发生更改时将事件发送回SFDC(订购者通道)。
我正在使用SOAP API中的upsert()函数,而使用Novell Identity Manager,您基本上构建了SOAP文档,并且可以在构建它时查看结果。 (您可以在XSLT中执行此操作,也可以使用各种允许的令牌在DirXML Script中构建文档。我使用的DirXML脚本到目前为止一直运行良好。)。
该评论的结果是我可以构建SOAP文档,看看它,以确保我做对了。这通常与示例代码通常提供的Java / C ++方法不同。这种方式更具视觉效果。
关于upsert()的一些事情我并不完全理解。我知道如何删除一个值,我应该得到那种事件。在<urn:sObjects>
节点内,添加一个节点(假设您已经声明了名称空间):
<urn1:fieldsToNull>FieldName</urn1:fieldsToNull>
我知道如何向属性(FieldName)添加值(AttrValue),添加如下节点:
<FieldName>AttrValue</FieldName>
所有这一切都很有效,而且很直接。
我的问题是,SFDC中的值是否可以是多值的?在eDirectory中,更改的多值属性可以通过两种方式发生:
看看SFDC,我只看到似乎存储在单个条目中的多选项列表属性:或;分隔。在SFDC中是否有另一种多值属性管理不同?如果是这样,如何通过SOAP API操纵它?
我仍然需要决定是否要将这些多选项列表映射到单个字符串或字符串的多值属性。第一种方式更容易,第二种方式更有用......嗯......选择......
一些参考文献:
答案 0 :(得分:2)
据我所知,除了多选选项列表之外,没有多值字段(并且它们映射到以分号分隔的字符串)。通常,如果您需要将多个值与数据相关联,平台会鼓励您与另一个(可能是新的,自定义)表格建立正确的关系。
我能想到的只有其他“不寻常”的东西是如何将某些对象(Case,Lead,或其他东西)上的OwnerId字段用于指向User或Queue记录。当您习惯于传统数据库中的外键关系时,看起来很奇怪。但这与你所问的不一样,因为一次只有一个值。
当然,根据查看用户的语言环境(例如系统管理员配置文件成为荷兰语的Systeembeheerder),您可能会对数据库中看到的值感到惊讶。但这仍然是一个单一的值,在查询结果发送给您之前即时翻译。
当我不得不与SFDC进行SOAP集成时,我总是使用WSDL文件,并且大多数情况下使用Apache Axis生成的Java代码都很好。亲自手工制作SOAP消息似乎......哇,硬核一点。你确定你更喜欢XML的可视化而不是类的创建,异常和所有这些东西准备好与几个开箱即用的integration方法之一一起使用吗?如果他们要改变WSDL,我只需要从中重新生成类;而对SOAP消息创建库的更改可能会很痛苦......