2011-01-13 8 views
8

Die Dokumentation für Netsuite fehlt ziemlich, sie decken die Grundlagen ab und lassen Sie dann los, um zu erforschen. Jeder, der kein PHP-Wissen besitzt und versucht, sein PHP-Toolkit zu benutzen, wäre auf den Knien und fleht um Gnade.Netsuite: Wie man benutzerdefinierte Felder an Kundenaufträge anfügt

An irgendeinem Punkt während des ganzen Projekts war es Trail und Fehler und versuchte, aus allem einen Sinn zu machen, bis das Zeug zu arbeiten begann.

Ich bin ratlos bei der Zuweisung von benutzerdefinierten Feldern zu Kundenaufträgen, ich weiß, es muss ein Objekt eines Objekts eines Objekts sein, damit es das XML für die Seife zu ordnen, aber was mit was mit Was?

Ich habe Code, den ich gearbeitet habe, der irgendwo kommt, aber es beschwert sich, es ist nicht der richtige RecordRef-Typ. Wenn jemand mit Netsuite gearbeitet hat und meinen Schmerz spürt, bitte lieh mir dein Wissen, bevor ich mir die Haare ausziehe.

Vielen Dank im Voraus.

Code:

$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

Ich habe festgestellt, dass ich alle meine Netsuite Web-Services-Interaktionen in Java prototypieren muss, indem ich die von Axis generierte Schnittstelle verwende, um herauszufinden, wie die SOAP-Abfragen korrekt erstellt werden. Erst nachdem ich in Java arbeite, versuche ich das in das PHP-Toolkit zu übersetzen. Wann immer möglich vermeide ich PHP mit netsuite. – Craig

Antwort

11

Ich bin nicht vertraut PHP mit NetSuite verwenden, aber ich habe eine gute Menge von C#/net Netsuite Arbeit geleistet.. Wie Craig erwähnt, finde ich es viel einfacher, eine Sprache wie C#/.net mit einer von Visual Studio generierten Schnittstelle zu verwenden, um herauszufinden, was in der Netsuite SuiteTalk-Webservice-API verfügbar ist.

In der NetSuite-Hilfe gibt es eine Menge Dokumentation zu diesem Thema - keineswegs alles, was Sie brauchen, aber ein guter Anfang.

Überprüfen Sie den Abschnitt SuiteFlex/SuiteTalk (Web Services) speziell diese Seite auf Ids & Referenzen.

Mit diesem sagte ich werde versuchen, mit einem .net Beispiel & Erklärung des Hinzufügens eines benutzerdefinierten Felds zu einem Kundenauftrag zu helfen.

Hier sind ein paar Beispiele für das Hinzufügen verschiedenen 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(); 

Von dem, was ich in Ihrem obigen Beispiel kann sagen, ich denke, das Problem mit dem ListOrRecordRef TypeId ist. Es ist schwer, anhand Ihres Beispiels zu sagen, auf welche typeId Sie verweisen, aber wenn Sie das herausfinden und die TypeId auf Ihrer SelectCustomFieldRef setzen, denke ich, dass das Ihr Problem beheben sollte.

+0

Ich fand das wahrscheinlich 3-4 Tage nachdem ich die Frage über die Usergruppe der netsuite gestellt hatte, endlich durchgezogen. Es war genau das, was Sie dachten, dass das ListOrRecordRef das Problem war, nachdem mir gesagt wurde, wie NS es nur akzeptieren würde, es wurde leicht zu verstehen, warum NS es so akzeptiert. Danke für die ausführlichen Informationen, jemand wird nach diesem einen Tag suchen und finden, dass dies nützlich ist und deshalb markiere ich das beantwortet. Danke noch einmal. – Dreamcube

+0

@Rick, wissen Sie, ob es möglich ist, die TypeID programmgesteuert zu identifizieren? Mit anderen Worten, wenn Sie den Namen des benutzerdefinierten Felds kennen, gibt es eine Möglichkeit, die aktuell zugeordnete CustomList zu ermitteln? – digitalsteez

+0

Beachten Sie, dass es sich bei StringCustomFieldRef eigentlich um die scriptId-Eigenschaft und nicht um die interneId handeln sollte. So würde diese Zeile jetzt aussehen: objStringCustomFieldRef.scriptId = "custbody_XXX_tracking_link"; – theark40

Verwandte Themen