2011-01-13 138 views
8

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

回答

11

我不熟悉使用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