Netsuite:如何将自定义字段附加到销售订单
Netsuite的文档相当缺乏,它们涵盖了基本知识,然后让您放松探索。任何人如果没有PHP的广泛知识试图使用他们的PHP工具包,他们会跪下求饶。Netsuite:如何将自定义字段附加到销售订单
在整个项目过程中的任何时候,它都会出现痕迹和错误,并试图理解所有事情,直到开始工作。
我很难将自定义字段分配给销售订单,我知道它必须是一个对象的对象的对象,以便它为XML分层以便接管肥皂,但与什么有关什么?
我有一些代码,我工作是越来越的地方,但它抱怨它不是正确的RecordRef类型。如果有人与Netsuite合作并感觉到我的痛苦,请在我拔出所有头发之前借给我你的知识。
在此先感谢。
代码:
$customFields = array('internalId' => 'custbody_new_die_yn','value' => array('name' => 'custbody_new_die_yn','internalId' => 'NO'));
$customObject = new nsComplexObject("SelectCustomFieldRef");
$customObject->setFields($customFields);
$salesOrderFields = array(
'entity' => new nsRecordRef(array('internalId' => $userId)),
'paymentMethod' => array('internalId' => 8),
'ccNumber' => 4111111111111111,
'ccExpireDate' => date("c", mktime(0,0,0,11,1,2011)),
'ccName' => 'Test Testerson',
'itemList' => array(
'item' => array(
'item' => array('internalId' => 5963),
'quantity' => 5
)
),
'department' => new nsRecordRef(array('internalId' => 1)),
'class' => new nsRecordRef(array('internalId' => 47)),
'customFieldList' => $customObject
);
我不熟悉使用PHP与NetSuite的,但我已经做了C#/。NET的NetSuite工作的一个良好的数额。正如Craig提到的,我发现使用c#/。net这样的语言,通过Visual Studio生成的界面,可以更轻松地找出Netsuite SuiteTalk Web服务API中可用的内容。
在NetSuite帮助中心里有相当多的关于这个东西的文档 - 绝不是每一个你需要的东西,而是一个好的开始。 Netsuite Help Center
请参阅Ids &参考中的SuiteFlex/SuiteTalk(Web服务)部分。 Using Internal Ids, External Ids, and References
虽这么说,我会尽力帮助有.NET示例&说明添加自定义字段添加到销售订单。
这里是加入不同CustomFieldRefs的几个例子:
//A list object to store all the customFieldRefs
List<CustomFieldRef> oCustomFieldRefList = new List<CustomFieldRef>();
//List or Record Type reference
SelectCustomFieldRef custbody_XXX_freight_terms = new SelectCustomFieldRef();
custbody_XXX_freight_terms.internalId = "custbody_XXX_freight_terms";
ListOrRecordRef oFreightTermsRecordRef = new ListOrRecordRef();
oFreightTermsRecordRef.internalId = <internalId of specific record in Netsuite>;
//See the References link above for more info on this - trying to figure out typeId caused me a lot of pain.
oFreightTermsRecordRef.typeId = <internalId of the List Record Type in Netsuite>;
custbody_XXX_freight_terms.value = oFreightTermsRecordRef;
oCustomFieldRefList.Add(custbody_XXX_freight_terms);
//Freeform text sorta field
StringCustomFieldRef objStringCustomFieldRef = new StringCustomFieldRef();
objStringCustomFieldRef.internalId = "custbody_XXX_tracking_link";
objStringCustomFieldRef.value = "StringValue";
oCustomFieldRefList.Add(objStringCustomFieldRef);
//Checkbox field type
BooleanCustomFieldRef custbody_XXX_if_fulfilled = new BooleanCustomFieldRef();
custbody_XXX_if_fulfilled.internalId = "custbody_XXX_if_fulfilled";
custbody_XXX_if_fulfilled.value = true;
oCustomFieldRefList.Add(custbody_XXX_if_fulfilled);
//By far the most complicated example a multi-select list referencing other records in Netsuite
MultiSelectCustomFieldRef custrecord_XXX_transaction_link = new MultiSelectCustomFieldRef();
//internal id of field you are updating
custrecord_XXX_transaction_link.internalId = "custrecord_XXX_transaction_link";
List<ListOrRecordRef> oListOrRecordRefList = new List<ListOrRecordRef>();
ListOrRecordRef oListOrRecordRefItemFulfillment = new ListOrRecordRef();
oListOrRecordRefItemFulfillment.name = "Item Fulfillment";
oListOrRecordRefItemFulfillment.internalId = <ItemFulfillmentInternalId>;
//Item Fulfillment is record type (Transaction -30) - this is from the above Reference links
oListOrRecordRefItemFulfillment.typeId = "-30";
oListOrRecordRefList.Add(oListOrRecordRefItemFulfillment);
ListOrRecordRef oListOrRecordRefSalesOrder = new ListOrRecordRef();
oListOrRecordRefSalesOrder.name = "Sales Order";
oListOrRecordRefSalesOrder.internalId = <SalesOrderInternalId>;
//Sales Order is record type (Transaction -30) - this is from the above Reference links
oListOrRecordRefSalesOrder.typeId = "-30";
oListOrRecordRefList.Add(oListOrRecordRefSalesOrder);
//Add array of all the ListOrRecordRefs to the MultiSelectCustomFieldRef
custrecord_XXX_transaction_link.value = oListOrRecordRefList.ToArray();
oCustomFieldRefList.Add(custrecord_XXX_transaction_link);
//And then add all these to the Custom Record List (Array) on the Sales Order Record
objSalesOrder.customFieldList = oCustomFieldRefList.ToArray();
从我可以在上面的例子告诉我认为你的问题是与ListOrRecordRef TYPEID。从你的例子很难告诉你是什么类型的引用,但是如果你能想出来并在你的SelectCustomFieldRef上设置TypeId,我认为这应该解决你的问题。
在我通过netsuite用户组发布问题后,我可能会在3-4天后发现这个问题,最后有人拉过来了。在我被告知NS如何接受它时,正是你认为ListOrRecordRef是问题,很容易理解NS为什么接受它。感谢您的详细信息,有人会搜索这一天,并找到这个有用的,这就是为什么我标记这个答案。再次感谢。 – Dreamcube 2011-02-23 18:11:22
我发现我必须使用Axis生成的接口在Java中为我的所有Netsuite Web服务交互进行原型设计,以了解如何正确构建SOAP查询。只有在我使用Java工作后,才会尝试将其转换为PHP工具包。尽可能避免使用netsuite的PHP。 – Craig 2011-01-14 15:00:38