如何更新Tridion观众经理联系人中的null ExtendedDetail?

如何更新Tridion观众经理联系人中的null ExtendedDetail?,tridion,tridion-2011,Tridion,Tridion 2011,我有一些代码可以通过Tridion.audencemanagement.API处理联系人。使用现有联系人时,其中一些联系人的ExtendedDetails与其他联系人不同。当我想要填充一个还没有值的值时,我遇到了麻烦 var extendedDetail = contact.ExtendedDetails[fieldName]; if (extendedDetail == null) { // What do I do here? } 问题是,当给定的ExtendedDetail为nu

我有一些代码可以通过Tridion.audencemanagement.API处理联系人。使用现有联系人时,其中一些联系人的
ExtendedDetail
s与其他联系人不同。当我想要填充一个还没有值的值时,我遇到了麻烦

var extendedDetail = contact.ExtendedDetails[fieldName];
if (extendedDetail == null)
{
  // What do I do here?
}  

问题是,当给定的ExtendedDetail为null时,我无法设置其值。文档中的代码示例不包括此示例,API文档也没有解释空ExtendedDetail的含义,更不用说如何创建并适当填充它了。

您需要使用
.Value
获取/设置ExtendedDetails的值

var extendedDetail=contact.ExtendedDetails[fieldName].Value;
if(extendedDetail==null)
{
contact.ExtendedDetails[fieldName].Value=“Value”
}  
为了便于参考,请查看文档“Audience Manager.NET API”(chm),并查看“ExtendedDetail”类中的一些示例

更新:我没有看到ExtendedDetails为空的场景。我使用以下简单的最小数据进行了测试,以创建一个联系人,然后获得扩展的数据详细信息。创建联系人时,您需要有
IDENTIFICATION\u KEY
IDENTIFICATION\u SOURCE
,这是必需的,并且是
ExtendedDetails
的一部分,因此您永远不应该遇到这种情况

//使用基本数据创建联系人。。
触点=新触点();
contact.EmailAddress=”abc@123.com";
contact.SubscriptionStatus=SubscriptionStatus.subscripted;
contact.ExtendedDetails[“IDENTIFICATION_KEY”]。值=“abc@123.com";
contact.ExtendedDetails[“IDENTIFICATION\u SOURCE”].Value=“网站”;
contact.Save();
//更新用户配置文件。。
ContactId=新字符串[]{”abc@123.com“,”网站“};
Contact Contact=Contact.getfromContactIdentificationOnKeys(ContactId);
contact.ExtendedDetails[“NAME”].Value=“NAME”;

您可以发布关于如何创建联系人的代码吗?

如果您的扩展详细信息为空,可能是因为您试图指定一个实际上不存在的字段。可能您拼错了,或者您的数据库表尚未更新,或者您最近对数据库所做的更改尚未被提取(由于明显的原因,扩展的详细信息集合被大量缓存)


简言之,如果在数据库中定义了扩展详细信息,那么它将在该集合中可用,因此它不会为null。

如果contact.ExtendedDetails[fieldName]为null,我该怎么做?我在哪里可以找到它的Value属性?我们也在使用它来创建新用户,但我不认为extendeddetail[fieldname]为null。奇怪,我会再检查一遍的。谢谢你,拉姆。这是关于更新现有联系人的。对于新的,没有问题,我检查了它,我从来没有看到扩展的详细信息何时将为空,即使您创建的联系人的最小数据。我正在用我的测试更新答案。新的联系人场景运行良好。这是关于一个现有联系人的,我们希望更新以前丢失的字段。我们正在根据联系人的电子邮件地址搜索联系人,电子邮件地址是身份密钥。我们从API获得了联系,但随后我们看到了这些问题。自从第一次遇到这些问题以来,我发现通过这种方式获得的联系人是“只读”的,您必须实例化一个新的联系人对象才能获得一个可写的联系人对象。我还没有检查这是否与此问题相关。哇,我很惊讶extendedDetail可能会为空-我本来希望总是有一个extendedDetail对象,即使它没有任何值-反映了这样一个事实,即AM联系人共享相同的extendedDetail字段,即使它们没有全部使用。