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 
); 
+0

我发现我必须使用Axis生成的接口在Java中为我的所有Netsuite Web服务交互进行原型设计,以了解如何正确构建SOAP查询。只有在我使用Java工作后,才会尝试将其转换为PHP工具包。尽可能避免使用netsuite的PHP。 – Craig 2011-01-14 15:00:38

我不熟悉使用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,我认为这应该解决你的问题。

+0

在我通过netsuite用户组发布问题后,我可能会在3-4天后发现这个问题,最后有人拉过来了。在我被告知NS如何接受它时,正是你认为ListOrRecordRef是问题,很容易理解NS为什么接受它。感谢您的详细信息,有人会搜索这一天,并找到这个有用的,这就是为什么我标记这个答案。再次感谢。 – Dreamcube 2011-02-23 18:11:22