Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
        private static Guid GetId(ICriteria criteria, string type, string code)
        {
            criteria.Add(Condition.Eq("Code", code))
                .SetProjection(Projections.Property("Id"))
                .SetMaxResults(1);
            Newtonsoft.Json.Linq.JArray id = _folder.GetFilterAll(criteria.JsonCriteriaSerialize(), type);
            Guid guid = id == null ? Guid.Empty : Guid.Parse(id[0].ToString());
            return guid;
        }


        private static void PostNewCustomer()
        {
            Guid country_id = GetId(new CountryDAO().CreateCriteria(), "Country", "BE");
            Guid civility_id = GetId(new CivilityDAO().CreateCriteria(), "Civility", "NV");
            Guid language_id = GetId(new LanguageDAO().CreateCriteria(), "Language", "nl");
            Guid currency_id = GetId(new CurrencyDAO().CreateCriteria(), "Currency", "EUR");
            Guid vat_id = GetId(new VatDAO().CreateCriteria(), "Vat", "21");
            Guid customerCategory_id = GetId(new CustomerCategoryDAO().CreateCriteria(), "CustomerCategory", "BIG");
            Guid defaultAccount_Id = GetId(new GLAccountDAO().CreateCriteria(), "GLAccount", "700000");
            Guid centralAccount_Id = GetId(new GLAccountDAO().CreateCriteria(), "GLAccount", "400000");
            Guid payCode_id = GetId(new PayCodeDAO().CreateCriteria(), "PayCode", "7");

            Customer cust = new Customer();
            cust.Code = "WBG3";
            cust.VatApplicable = VatApplicable.Subject;
            cust.Vat_Id = vat_id;
            cust.CustomerCategory_Id = customerCategory_id;
            cust.GLAccount_Id = defaultAccount_Id;
            cust.GLAccount2_Id = centralAccount_Id;
            cust.PayCode_Id = payCode_id;

            cust.Third = new Third();
            cust.Third.Code = "WBG3";
            cust.Third.Name = "WINBOOKS GROUP 3";
            cust.Third.ThirdCivility_Id = civility_id;
            cust.Third.Language_Id = language_id;
            cust.Third.Currency_Id = currency_id;
            cust.Third.VatCountry_Id = country_id;
            cust.Third.VatNumber = "0000000394";
            cust.Third.Addresses = new List<Address>();

            Address adr = new Address();
            adr.Address1 = "330 Lemonierlaan";
            adr.Address2 = "";
            adr.PhoneNo = "+3223456789";
            adr.Country_Id = country_id;
            adr.Zip = "2000";
            adr.Town = "Antwerpen";
            adr.IsDelivering = true;
            adr.IsDeliveringDefault = true;
            adr.IsInvoicing = true;
            adr.IsInvoicingDefault = true;
            adr.IsPosting = true;
            adr.IsPostingDefault = true;

            cust.Third.Addresses.Add(adr);

            _folder.Insert<Customer>(cust, 3, false);

       }


Posting a new customer (with the friendly code properties)

We suggest to avoid to use avoiding the usage of the friendly code properties when you post a list of Customers Customers. You should get the Id of the entities before. 

POST {{url}}/app/Customer/TEST/Folder/{{folder}}

The body of the request will for version <= 2.4 of WinBooks on Web will be like this:

Code Block
{
   "$type": "Winbooks.TORM.OM.Customer, Winbooks.TORM.OM",
   "TotalLevel": 4,
   "Code": "TEST",
   "VatApplicable": 1,
   "IsLocked": false,
   "IsHidden": false,
   "MemoType": 0,
   "Third": {
      "$type": "Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
      "TotalLevel": 3,
      "Code": "TEST",
      "Name": "The Test Company",
      "VatNumber": "0000000196",
      "WebSite": "www.test.be",
      "Addresses": [
         {
            "$type": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
            "TotalLevel": 2,
            "Index": 0,
            "Address1": "Vuchtlaan 78",
            "Address2": "",
            "Town": "Antwerpen",
            "Zip": "2000",
            "Name": "",
            "Number": "",
            "Box": "",
            "PhoneNo": "+3233215476",
            "FaxNo": "",
            "MemoType": 0,
            "Memo": "",
            "IsDelivering": true,
            "IsDeliveringDefault": true,
            "IsPosting": true,
            "IsPostingDefault": true,
            "IsInvoicing": true,
            "IsInvoicingDefault": true,
            "CountryCode": "BE"
         }
      ],
      "CivilityCode": "NV",
      "VatCountryCode": "BE",
      "LanguageCode": "en",
      "CurrencyCode": "EUR"
   },
   "VatCode": "21",
   "CategoryCode": "EU",
   "GLAccountDefaultCode": "700000",
   "GLAccountCentralCode": "400000",
   "PayCodeCode": "30"
}

The last level (Addresses) has TotalLevel = 2 because we use the friendly code property (CountryCode). If we use the Id's instead, we have to put TotalLevel = 1 for the last level.

Do not use the DefaultAddress entity which does not support the posting.

Posting a new Customer (with the Id's)

It is more efficient to specify the Id's of the related entities, especially when we post several customers using the same country, civility, language, currency, vat, category, default account, central account or payment term (PayCode).

First, we have to retrieve the Id's:

...

Request

...

Id

...

GET {{url}}/app/Vat/21/Folder/{{folder}}
or

GET {{url}}/app/VatAccount/21/Folder/{{folder}}

...

body for version >= 2.5 of WinBooks On Web looks like this:

Code Block
{
    "$type": "Winbooks.TORM.OM.Customer, Winbooks.TORM.OM",
    "TotalLevel": 5,
    "Code": "WB6",
    "VatApplicable": 1,
    "Third": {
        "$type": "Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
	    "TotalLevel": 4,
        "Code": "WB6",
        "Name": "Customer WB6",
        "VatNumber": "0000000394",
        "Addresses": [
            {
                "$type": "Winbooks.TORM.OM.Third_Address, Winbooks.TORM.OM",
			    "TotalLevel": 3,
                "IsDelivering": true,
                "IsDeliveringDefault": true,
                "IsPosting": true,
                "IsPostingDefault": true,
                "IsInvoicing": true,
                "IsInvoicingDefault": true,
                "Index": 0,
                "Address": {
                    "$type": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
					"TotalLevel": 2,
                    "Address1": "330 Lemonierlaan (WB6)",
                    "Town": "Antwerpen",
                    "Zip": "2000",
                    "PhoneNo": "+3223456789",
					"CountryCode": "BE"
                }
            }
        ],
      "CivilityCode": "NV",
      "VatCountryCode": "BE",
      "LanguageCode": "en",
      "CurrencyCode": "EUR"
    },
   "VatCode": "21",
   "CategoryCode": "EU",
   "GLAccountDefaultCode": "700000",
   "GLAccountCentralCode": "400000",
   "PayCodeCode": "30"
}

The last level (Addresses) has TotalLevel = 2 because we use the friendly code property (CountryCode). If we use the Id's instead, we have to put TotalLevel = 1 for the last level.

Do not use the DefaultAddress entity which does not support the posting.

Posting a new Customer (with the Id's)

It is more efficient to specify the Id's of the related entities, especially when we post several customers using the same country, civility, language, currency, vat, category, default account, central account or payment term (PayCode).

First, we have to retrieve the Id's:

Request

Id

GET {{url}}/app/Country/BE/Folder/{{folder}}4bb898f0-21ba-4ea9-9c35-a74d006cd473
GET {{url}}/app/Civility/NV/Folder/{{folder}}9bc5b8f4-3682-46c6-ac84-a74d006cd9ad
GET {{url}}/app/Language/en/Folder/{{folder}}4b2d0fa7-ecf7-4883-9e04-a89d00bcd216
GET {{url}}/app/Currency/EUR/Folder/{{folder}}8d70e1d6-57cf-4bc1-8402-a74d006cd472

GET {{url}}/app/Vat/21/Folder/{{folder}}
or

GET {{url}}/app/VatAccount/21/Folder/{{folder}}

d939ccde-90ec-45bb-97fe-a74d006cd718
GET {{url}}/app/CustomerCategory/BIG/Folder/{{folder}}c3613c92-d081-4a94-a245-a8b3005d2391
GET {{url}}/app/GLAccount/700000/Folder/{{folder}}c61c5554-0803-4286-9315-a74d006cd5aa
GET {{url}}/app/GLAccount/400000/Folder/{{folder}}023a99d0-f1e5-45c8-b902-a74d006cd5a8
GET {{url}}/app/PayCode/7/Folder/{{folder}}48a7b7ab-0f1b-4420-af2e-a74d006cd9a8


Or really more efficiently via the ExecuteCriteria:

Request

Body

POST {{url}}/app/Countrys/Folder/{{folder}}/ExecuteCriteria{ "EntityType": "Winbooks.TORM.OM.Countrys, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["BE"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }
POST {{url}}/app/Civilitys/Folder/{{folder}}/ExecuteCriteria{ "EntityType": "Winbooks.TORM.OM.ThirdCivility, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["NV"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }
POST {{url}}/app/Languages/Folder/{{folder}}/ExecuteCriteria{ "EntityType": "Winbooks.TORM.OM.Language, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["en"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }
POST {{url}}/app/Currencys/Folder/{{folder}}/ExecuteCriteria

{ "EntityType": "Winbooks.TORM.OM.Currency, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["EUR"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }

POST {{url}}/app/VatAccounts/Folder/{{folder}}/ExecuteCriteria

{ "EntityType": "Winbooks.TORM.OM.Accounting.VatAccount, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["21"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }

POST {{url}}/app/GLAccounts/Folder/{{folder}}/ExecuteCriteria{ "EntityType": "Winbooks.TORM.OM.Accounting.GLAccount, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["700000"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }
POST {{url}}/app/GLAccounts/Folder/{{folder}}/ExecuteCriteria{ "EntityType": "Winbooks.TORM.OM.Accounting.GLAccount, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["400000"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }
POST {{url}}/app/PayCodes/Folder/{{folder}}/ExecuteCriteria

{ "EntityType": "Winbooks.TORM.OM.Accounting.PayCode, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["7"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }


To post the customer, the body will be this one for version <= 2.4:

Code Block
{
   "$type": "Winbooks.TORM.OM.Customer, Winbooks.TORM.OM",
   "TotalLevel": 3,
   "Vat_Id": "d939ccde-90ec-45bb-97fe-a74d006cd718",
   "CustomerCategory_Id": "c3613c92-d081-4a94-a245-a8b3005d2391",
   "GLAccount_Id": "c61c5554-0803-4286-9315-a74d006cd5aa",
   "GLAccount2_Id": "023a99d0-f1e5-45c8-b902-a74d006cd5a8",
   "PayCode_Id": "bee3ad14-c3b0-4284-80e7-a74d006cd9a8",
   "Code": "TEST2",
   "VatApplicable": 1,
   "IsLocked": false,
   "IsHidden": false,
   "MemoType": 0,
   "Third": {
      "$type": "Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
      "TotalLevel": 2,
      "ThirdCivility_Id": "9bc5b8f4-3682-46c6-ac84-a74d006cd9ad",
      "VatCountry_Id": "4bb898f0-21ba-4ea9-9c35-a74d006cd473",
      "Language_Id": "4b2d0fa7-ecf7-4883-9e04-a89d00bcd216",
      "Currency_Id": "8d70e1d6-57cf-4bc1-8402-a74d006cd472",
      "Code": "TEST2",
      "Name": "The Test Company 2",
      "VatNumber": "0000000295",
      "WebSite": "www.test2.be",
      "Addresses": [
         {
            "$type": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
            "TotalLevel": 1,
            "Country_Id": "4bb898f0-21ba-4ea9-9c35-a74d006cd473",
            "Index": 0,
            "Address1": "Vuchtlaan 79",
            "Address2": "",
            "Town": "Antwerpen",
            "Zip": "2000",
            "Name": "",
            "Number": "",
            "Box": "",
            "PhoneNo": "+3233215476",
            "FaxNo": "",
            "MemoType": 0,
            "Memo": "",
            "IsDelivering": true,
            "IsDeliveringDefault": true,
            "IsPosting": true,
            "IsPostingDefault": true,
            "IsInvoicing": true,
            "IsInvoicingDefault": true
         }
      ]
   }
}


And this one for version >= 2.5:

Code Block
{
    "$type": "Winbooks.TORM.OM.Customer, Winbooks.TORM.OM",
	"TotalLevel": 4,
    "Code": "WB5",
    "Vat_Id": "1d625e47-4871-450b-91c8-9f9400b4ca36",
    "GLAccount_Id": "5633a32d-c312-4e19-9e6b-9f9400b4c691",
    "GLAccount2_Id": "d2647e20-8267-4703-90c0-9f9400b4c67a",
    "PayCode_Id": "f6a39f52-a79d-4758-933a-9f9400b4d059",
    "VatApplicable": 1,
    "Code": "WB5",
    "Third": {
        "$type": "Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
    	"TotalLevel": 3,
        "Code": "WB5",
        "ThirdCivility_Id": "5f4964b8-00f2-464f-a01d-9f9400b4d0ce",
        "VatCountry_Id": "8f8a337e-b483-4c30-b6ed-9f9400b4c553",
        "Language_Id": "5dc36906-5d31-4ff9-b20c-9f9400b4c5df",
        "Currency_Id": "2b790e84-f9f5-4ff6-b775-9f9400b4c54e",
        "Name": "Customer WB5",
        "VatNumber": "0000000394",
        "Code": "WB5",
        "Addresses": [
            {
                "$type": "Winbooks.TORM.OM.Third_Address, Winbooks.TORM.OM",
				"TotalLevel": 2,
                "IsDelivering": true,
                "IsDeliveringDefault": true,
                "IsPosting": true,
                "IsPostingDefault": true,
                "IsInvoicing": true,
                "IsInvoicingDefault": true,
                "Index": 0,
                "Address": {
                    "$type": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
					"TotalLevel": 1,
                    "Country_Id": "8f8a337e-b483-4c30-b6ed-9f9400b4c553",
                    "Address1": "330 Lemonierlaan (WB5)",
                    "Town": "Antwerpen",
                    "Zip": "2000",
                    "PhoneNo": "+3223456789"
                }
            }
        ]
    }
}

Check if a Customer exists

The best is to use the ExecuteCriteria.

POST {{url}}/app/Customers/Folder/{{folder}}/ExecuteCriteria

The body of the request:


{ "EntityType

Or really more efficiently via the ExecuteCriteria:

...

Request

...

Body

...

{ "EntityType": "Winbooks.TORM.OM.Currency, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["EUR"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }

...

{ "EntityType": "Winbooks.TORM.OM.Accounting.VatAccount, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["21"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }

...

{ "EntityType": "Winbooks.TORM.OM.Accounting.PayCode, Winbooks.TORM.OM",
"Conditions": [ {"Operator": 0, "PropertyName": "Code", "Values": ["7"] } ],
"ProjectionsList": [ {"PropertyName": "Id", "Operator": 22} ],
"MaxResult": 1 }

To post the customer, the body will be then this one:

{
   "$type": "Winbooks.TORM.OM.Customer, Winbooks.TORM.OM",
   "TotalLevel": 3,
   "Vat_Id": "d939ccde-90ec-45bb-97fe-a74d006cd718",
   "CustomerCategory_Id": "c3613c92-d081-4a94-a245-a8b3005d2391OM",
"Conditions": [  {"GLAccount_IdOperator": "c61c5554-0803-4286-9315-a74d006cd5aa",
   "GLAccount2_Id0, "PropertyName": "023a99d0-f1e5-45c8-b902-a74d006cd5a8Code",
   "PayCode_IdValues": "bee3ad14-c3b0-4284-80e7-a74d006cd9a8",
   "Code["TEST2"] } ],
"ProjectionsList": [ {"PropertyName": "TEST2Id",
 "Operator": 22} ],
"VatApplicableMaxResult": 1,
   "IsLocked": false,
   "IsHidden": false,
   "MemoType" }


The result:

[
"c961989a-afb3-4c2e-aba0-a8b3008e9942"
]


In case of the customer code does not exist, it returns an empty result.

Update a Customer

You can update the Customer and the Third by the same way you create them but you have to remove the address else it will create a new address. The address has to be updated separately.

PUT {{url}}/app/Customer/TEST2/Folder/{{folder}}

The body to update the Customer and the Third is:

{
   : 0,
   "Third": {
      "$type": "Winbooks.TORM.OM.ThirdCustomer, Winbooks.TORM.OM",
   "TotalLevel": 3,
   "TotalLevel": 2,
    "Vat_Id": "d939ccde-90ec-45bb-97fe-a74d006cd718",
   "ThirdCivilityCustomerCategory_Id": "9bc5b8f4c3613c92-3682d081-46c64a94-ac84a245-a74d006cd9ada8b3005d2391",
"VatCountryGLAccount_Id": "4bb898f0c61c5554-21ba0803-4ea94286-9c359315-a74d006cd473a74d006cd5aa", "LanguageGLAccount2_Id": "4b2d0fa7023a99d0-ecf7f1e5-488345c8-9e04b902-a89d00bcd216a74d006cd5a8", "CurrencyPayCode_Id": "8d70e1d6bee3ad14-57cfc3b0-4bc14284-840280e7-a74d006cd472a74d006cd9a8", "Code": "TEST2", "NameVatApplicable": "The Test Company 2"1, "VatNumberIsLocked": "0000000295"false, "WebSiteIsHidden": "www.test2.be"false, "AddressesMemoType": [9, "Memo": "This is just a {comment", "Third": { "$type": "Winbooks.TORM.OM.AddressThird, Winbooks.TORM.OM", "TotalLevel": 2, "ThirdCivility_Id": "9bc5b8f4-3682-46c6-ac84-a74d006cd9ad", "TotalLevelVatCountry_Id": 1"4bb898f0-21ba-4ea9-9c35-a74d006cd473", "Language_Id": "4b2d0fa7-ecf7-4883-9e04-a89d00bcd216", "CountryCurrency_Id": "4bb898f08d70e1d6-21ba57cf-4ea94bc1-9c358402-a74d006cd473a74d006cd472", "Code": "TEST2", "IndexName": 0, "The Test Company 2", "Address1VatNumber": "Vuchtlaan 790000000295", "Address2": "", "Town": "Antwerpen", "Zip": "2000", "Name": "", "Number": "", "Box": "", "PhoneNo": "+3233215476", "FaxNo": "", "MemoType": 0,"WebSite": "www.test2.be" } }

The TotalLevel of the last level (Third) = 2 else it won't update.

Update the Address

Find the Address Id

First, we have to retrieve the Id of the Address of the Third TEST2.

For version <= 2.4 of WinBooks on Web

This is the .NET query to do that (with the Winbooks.Apis.Service.dll):

ICriteria criteria = new AddressDAO().CreateCriteria()
   .CreateAlias("third", typeof(Third), Third.Names.Id, Address.Names.Third_Id)
   .Add(Condition.Eq("third." + Third.Names.Code, "BEBOP"))
   .Add(Condition.Eq(Address.Names.IsInvoicingDefault, true))
   .SetProjection(Projections.Property(Address.Names.Id));
Newtonsoft.Json.Linq.JArray addressid = _folder.GetFilterAll(criteria.JsonCriteriaSerialize(), "Address");
if (addressid == null)
Tools.Log(" no address for BEBOP");
else
Tools.Log(" address_id = " + addressid[0].ToString());

The corresponding http request is this one:

POST {{url}}/app/Addresss/Folder/{{folder}}/ExecuteCriteria

with the following JSON body:

Code Block
{
   "EntityType": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
   "Alias": "this",
   "Association": {
      "third": {
         

...

"

...

AliasName": "third",
         

...

"

...

Type": 

...

"Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
         "

...

JoinType": 

...

1,

...

         "

...

LeftProperty": 

...

"Id",

...

         "

...

RightProperty": 

...

"Third_Id"
      }
   },
   "

...

Conditions": 

...

[
      {
   

...

      

...

Check if a Customer exists

The best is to use the ExecuteCriteria.

POST {{url}}/app/Customers/Folder/{{folder}}/ExecuteCriteria

The body of the request:

...

"Operator": 0,
         "PropertyName": "

...

third.Code",

...

         "OtherPropertyName": 

...

"

...

",
         "Values": [
            "BEBOP"
         ],
      }
   ],
   "ProjectionsList": [
      {
         "PropertyName": "Id",
         "Operator": 22
      }
   ],

...

}


For version >= 2.5 of WinBooks on Web

This is the .NET query to do that (with the Winbooks.Apis.Service.dll):

ICriteria criteria = new Third_AddressDAO().CreateCriteria()
.CreateAlias("address", typeof(Address), Address.Names.Id, Third_Address.Names.Address_Id)
.CreateAlias("third", typeof(Third), Third.Names.Id, Third_Address.Names.Third_Id)
.Add(Condition.Eq("third." + Third.Names.Code, "BEBOP"))
.Add(Condition.Eq(Third_Address.Names.IsInvoicingDefault, true))
.SetProjection(Projections.Property("address." + Address.Names.Id));
Newtonsoft.Json.Linq.JArray addressid = _folder.GetFilterAll(criteria.JsonCriteriaSerialize(), "Third_Address");
if (addressid == null)
Tools.Log(" no address for BEBOP");
else
Tools.Log(" address_id = " + addressid[0].ToString());

The corresponding http request is this one:

POST {{url}}/app/Third_Addresss/Folder/{{folder}}/ExecuteCriteria

with the following JSON body:

Code Block
{
    "EntityType

...

[
"c961989a-afb3-4c2e-aba0-a8b3008e9942"
]

In case of the customer code does not exist, it returns an empty result.

Update a Customer

You can update the Customer and the Third by the same way you create them but you have to remove the address else it will create a new address. The address has to be updated separately.

POST {{url}}/app/Customer/TEST2/Folder/{{folder}}

The body to update the Customer and the Third is:

...

": "Winbooks.TORM.OM.Third_Address, Winbooks.TORM.OM",
    

...

"

...

IsCustomization": 

...

false,
    

...

"

...

Alias": "

...

this",
    

...

"

...

Association": 

...

{
        "

...

address": 

...

{
            "

...

AliasName": "

...

address",
      

...

      "Type": "Winbooks.TORM.OM.Address, Winbooks.TORM.OM",
            "

...

JoinType": 

...

1,
      

...

The TotalLevel of the last level (Third) = 2 else it won't update.

Update the Address

Find the Address Id

First we have to retrieve the Id of the Address of the Third TEST2.

This is the .NET query to do that (with the Winbooks.Apis.Service.dll):

      "LeftProperty": "Id",
            

...

"RightProperty": "Address_Id"
        },
        "third": {
       

...

     "AliasName": "third",

...


            "Type": "Winbooks.TORM.OM.Third, Winbooks.TORM.OM",
            "JoinType": 1,
   

...

         "LeftProperty": "Id",
            "RightProperty": "Third_Id"
     

...

 

...

  }
    },
    "Conditions": [
     

...

   {
         

...

 

...

 

...

 "

...

The corresponding http request is this one:

POST {{url}}/app/Addresss/Folder/{{folder}}/ExecuteCriteria

with the following JSON body:

...

Operator": 0,
            "

...

PropertyName": "

...

third.Code",
            "

...

OtherPropertyName": "

...

",
   

...

         "

...

Values": 

...

[
               

...

 "

...

BEBOP"

...


            ]
   

...

     },
        {
            "

...

Operator": 

...

0,
            "

...

PropertyName": "

...

IsInvoicingDefault",
            "

...

OtherPropertyName": "

...

",
      

...

   

...

   "

...

Values": [
                

...

true
           

...

 ]
        }
   

...

 ],
   

...

"Havings": [],
    "

...

ProjectionsList": 

...

[
        {
 

...

 

...

          "PropertyName": 

...

"

...

address.Id",
           

...

 "Operator": 22
        }
    ],
    "

...

Orders": [],
    

...

"Params": {},
    "FirstResult": -1,
    "

...

MaxResult": 

...

-1,

...

    "

...

ResultState": 

...

0,
    

...

"TimeOutSeconds": 0
}


The result is an array of Id's:

[
    "adb4d306-63c9-4d5d-a31a-a8b3008e9946"
]

...