Happy Business Starts Here

Tutor

[FIX DEPLOYED] Lost subscription notes on update request

NOTE FROM ZUORA SUPPORT: THIS REPORTED ISSUE HAS BEEN FIXED SINCE.

 

Hello,

 

we're experiencing a problem with lost notes for subscriptions rigth after using a SOAP update() call on the subscription.

Here are the steps to reproduce this issue:

1. create a subscription with status draft (subscribe)

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://object.api.zuora.com/" xmlns:ns2="http://api.zuora.com/">
<SOAP-ENV:Header>
    <ns2:SessionHeader>
        <ns2:session>X</ns2:session>
    </ns2:SessionHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
    <ns2:subscribe>
        <ns2:subscribes>
            <ns2:Account>
                <ns1:Id>2c92c0f9591b6ea701591c8511f65f26</ns1:Id>
                <ns1:AutoPay>false</ns1:AutoPay>
                <ns1:Batch>Batch3</ns1:Batch>
                <ns1:BcdSettingOption>ManualSet</ns1:BcdSettingOption>
                <ns1:BillCycleDay>3</ns1:BillCycleDay>
                <ns1:BillToId>2c92c0f8592a62cd015964af820a2bd8</ns1:BillToId>
                <ns1:CommunicationProfileId>2c92c0f858199d850158208eb90a2aac</ns1:CommunicationProfileId>
                <ns1:CreatedById>2c92c0f8578d66580157952dfa8e0bf6</ns1:CreatedById>
                <ns1:CreatedDate>2016-12-20T14:56:40.000000+01:00</ns1:CreatedDate>
                <ns1:Currency>EUR</ns1:Currency>
                <ns1:InvoiceDeliveryPrefsEmail>false</ns1:InvoiceDeliveryPrefsEmail>
                <ns1:InvoiceDeliveryPrefsPrint>false</ns1:InvoiceDeliveryPrefsPrint>
                <ns1:InvoiceTemplateId>2c92c0f9578d5b3c0157907ad1e7067c</ns1:InvoiceTemplateId>
                <ns1:Name>XYZ</ns1:Name>
                <ns1:ParentId>2c92c0f9591b6eab01591c850f226302</ns1:ParentId>
                <ns1:PaymentTerm>Due Upon Receipt</ns1:PaymentTerm>
                <ns1:SoldToId>2c92c0f8592a62cd015964af820a2bd8</ns1:SoldToId>
                <ns1:Status>Active</ns1:Status>
                <ns1:TaxExemptStatus>No</ns1:TaxExemptStatus>
                <ns1:thm_account_id__c>160192</ns1:thm_account_id__c>
                <ns1:thm_account_type__c>Direct Connect</ns1:thm_account_type__c>
                <ns1:thm_billing_cycle__c>monthly</ns1:thm_billing_cycle__c>
                <ns1:UpdatedById>2c92c0f8578d66580157952dfa8e0bf6</ns1:UpdatedById>
                <ns1:UpdatedDate>2017-01-03T17:59:45.000000+01:00</ns1:UpdatedDate>
            </ns2:Account>
            <ns2:SubscribeOptions>
                <ns2:ProcessPayments>false</ns2:ProcessPayments>
            </ns2:SubscribeOptions>
            <ns2:SubscriptionData>
                <ns2:Subscription>
                    <ns1:AccountId>2c92c0f9591b6ea701591c8511f65f26</ns1:AccountId>
                    <ns1:InvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns1:InvoiceOwnerId>
                    <ns1:Notes>Eden</ns1:Notes>
                    <ns1:Status>Draft</ns1:Status>
                    <ns1:TermType>EVERGREEN</ns1:TermType>
                    <ns1:thm_item_id__c>5080</ns1:thm_item_id__c>
                    <ns1:thm_locale_code__c>GR</ns1:thm_locale_code__c>
                    <ns1:thm_partner_id__c>1272</ns1:thm_partner_id__c>
                </ns2:Subscription>
                <ns2:RatePlanData>
                    <ns2:RatePlan>
                        <ns1:ProductRatePlanId>2c92c0f9578d5b3b015799727c4c61e2</ns1:ProductRatePlanId>
                    </ns2:RatePlan>
                    <ns2:RatePlanChargeData>
                        <ns2:RatePlanCharge>
                            <ns1:ProductRatePlanChargeId>2c92c0f958aa45600158cf4bb5ed3fdb</ns1:ProductRatePlanChargeId>
                            <ns1:RatePlanId>2c92c0f9578d5b3b015799727c4c61e2</ns1:RatePlanId>
                        </ns2:RatePlanCharge>
                        <ns2:RatePlanChargeTier>
                            <ns1:EndingUnit>0</ns1:EndingUnit>
                            <ns1:Price>0.01</ns1:Price>
                            <ns1:PriceFormat>PerUnit</ns1:PriceFormat>
                            <ns1:StartingUnit>0</ns1:StartingUnit>
                            <ns1:Tier>1</ns1:Tier>
                        </ns2:RatePlanChargeTier>
                    </ns2:RatePlanChargeData>
                </ns2:RatePlanData>
            </ns2:SubscriptionData>
        </ns2:subscribes>
    </ns2:subscribe>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version=\'1.0\' encoding=\'utf-8\'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ns1:subscribeResponse xmlns:ns1="http://api.zuora.com/">
        <ns1:result>
            <ns1:AccountId>2c92c0f9591b6ea701591c8511f65f26</ns1:AccountId>
            <ns1:AccountNumber>A00063059</ns1:AccountNumber>
            <ns1:SubscriptionId>2c92c0f8592a62720159654e7bc8064f</ns1:SubscriptionId>
            <ns1:SubscriptionNumber>A-S00013585</ns1:SubscriptionNumber>
            <ns1:Success>true</ns1:Success>
            <ns1:TotalMrr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
            <ns1:TotalTcv xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
        </ns1:result>
    </ns1:subscribeResponse>
</soapenv:Body>
</soapenv:Envelope>


2. after this action the notes are stored correctly

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://api.zuora.com/">
<SOAP-ENV:Header>
    <ns1:SessionHeader>
        <ns1:session>X</ns1:session>
    </ns1:SessionHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
    <ns1:query>
        <ns1:queryString>select Id, CreatedById, CreatedDate, UpdatedById, UpdatedDate, thm_item_id__c,
            thm_locale_code__c, thm_partner_id__c, AccountId, AutoRenew, CancelledDate, ContractAcceptanceDate,
            ContractEffectiveDate, CreatorAccountId, CreatorInvoiceOwnerId, CurrentTerm, CurrentTermPeriodType,
            InitialTerm, InitialTermPeriodType, InvoiceOwnerId, IsInvoiceSeparate, Name, Notes, OriginalCreatedDate,
            OriginalId, PreviousSubscriptionId, RenewalTerm, RenewalTermPeriodType, ServiceActivationDate, Status,
            SubscriptionEndDate, SubscriptionStartDate, TermEndDate, TermStartDate, TermType, Version from Subscription
            where Id = \'2c92c0f8592a62720159654e7bc8064f\'
        </ns1:queryString>
    </ns1:query>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version=\'1.0\' encoding=\'utf-8\'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ns1:queryResponse xmlns:ns1="http://api.zuora.com/">
        <ns1:result>
            <ns1:done>true</ns1:done>
            <ns1:queryLocator xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
            <ns1:records xmlns:ns2="http://object.api.zuora.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Subscription">
                <ns2:Id>2c92c0f8592a62720159654e7bc8064f</ns2:Id>
                <ns2:AccountId>2c92c0f9591b6ea701591c8511f65f26</ns2:AccountId>
                <ns2:AutoRenew>false</ns2:AutoRenew>
                <ns2:CreatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:CreatedById>
                <ns2:CreatedDate>2017-01-03T18:09:19.000+01:00</ns2:CreatedDate>
                <ns2:CurrentTermPeriodType>Month</ns2:CurrentTermPeriodType>
                <ns2:InitialTermPeriodType>Month</ns2:InitialTermPeriodType>
                <ns2:InvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns2:InvoiceOwnerId>
                <ns2:IsInvoiceSeparate>false</ns2:IsInvoiceSeparate>
                <ns2:Name>A-S00013585</ns2:Name>
                <ns2:Notes>Eden</ns2:Notes>
                <ns2:OriginalCreatedDate>2017-01-03T18:09:19.000+01:00</ns2:OriginalCreatedDate>
                <ns2:OriginalId>2c92c0f8592a62720159654e7bc8064f</ns2:OriginalId>
                <ns2:RenewalTermPeriodType>Month</ns2:RenewalTermPeriodType>
                <ns2:Status>Draft</ns2:Status>
                <ns2:TermType>EVERGREEN</ns2:TermType>
                <ns2:thm_item_id__c>5080</ns2:thm_item_id__c>
                <ns2:thm_locale_code__c>GR</ns2:thm_locale_code__c>
                <ns2:thm_partner_id__c>1272</ns2:thm_partner_id__c>
                <ns2:UpdatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:UpdatedById>
                <ns2:UpdatedDate>2017-01-03T18:09:19.000+01:00</ns2:UpdatedDate>
                <ns2:Version>1</ns2:Version>
            </ns1:records>
            <ns1:size>1</ns1:size>
        </ns1:result>
    </ns1:queryResponse>
</soapenv:Body>
</soapenv:Envelope>


3. activate the subscription

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://object.api.zuora.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://api.zuora.com/">
<SOAP-ENV:Header>
    <ns2:SessionHeader>
        <ns2:session>X</ns2:session>
    </ns2:SessionHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
    <ns2:update>
        <ns2:zObjects xsi:type="ns1:Subscription">
            <ns1:Id>2c92c0f8592a62720159654e7bc8064f</ns1:Id>
            <ns1:ContractAcceptanceDate>2017-01-03</ns1:ContractAcceptanceDate>
            <ns1:ContractEffectiveDate>2017-01-03</ns1:ContractEffectiveDate>
            <ns1:ServiceActivationDate>2017-01-03</ns1:ServiceActivationDate>
            <ns1:thm_locale_code__c xsi:nil="true"/>
            <ns1:thm_partner_id__c xsi:nil="true"/>
        </ns2:zObjects>
    </ns2:update>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


<?xml version=\'1.0\' encoding=\'utf-8\'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ns1:updateResponse xmlns:ns1="http://api.zuora.com/">
        <ns1:result>
            <ns1:Id>2c92c0f8592a62720159654e7bc8064f</ns1:Id>
            <ns1:Success>true</ns1:Success>
        </ns1:result>
    </ns1:updateResponse>
</soapenv:Body>
</soapenv:Envelope>


4. now the notes field is null!

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org soap/envelope/" xmlns:ns1="http://api.zuora.com/">
    <SOAP-ENV:Header>
        <ns1:SessionHeader>
            <ns1:session>X</ns1:session>
        </ns1:SessionHeader>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:query>
            <ns1:queryString>select Id, CreatedById, CreatedDate, UpdatedById, UpdatedDate, thm_item_id__c,
                thm_locale_code__c, thm_partner_id__c, AccountId, AutoRenew, CancelledDate, ContractAcceptanceDate,
                ContractEffectiveDate, CreatorAccountId, CreatorInvoiceOwnerId, CurrentTerm, CurrentTermPeriodType,
                InitialTerm, InitialTermPeriodType, InvoiceOwnerId, IsInvoiceSeparate, Name, Notes, OriginalCreatedDate,
                OriginalId, PreviousSubscriptionId, RenewalTerm, RenewalTermPeriodType, ServiceActivationDate, Status,
                SubscriptionEndDate, SubscriptionStartDate, TermEndDate, TermStartDate, TermType, Version from
                Subscription where name = \'A-S00013585\'
            </ns1:queryString>
        </ns1:query>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
        ''<?xml version=\'1.0\' encoding=\'utf-8\'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ns1:queryResponse xmlns:ns1="http://api.zuora.com/">
        <ns1:result>
            <ns1:done>true</ns1:done>
            <ns1:queryLocator xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
            <ns1:records xmlns:ns2="http://object.api.zuora.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xsi:type="ns2:Subscription">
                <ns2:Id>2c92c0f8592a62720159654e7bc8064f</ns2:Id>
                <ns2:AccountId>2c92c0f9591b6ea701591c8511f65f26</ns2:AccountId>
                <ns2:AutoRenew>false</ns2:AutoRenew>
                <ns2:ContractAcceptanceDate>2017-01-03</ns2:ContractAcceptanceDate>
                <ns2:ContractEffectiveDate>2017-01-03</ns2:ContractEffectiveDate>
                <ns2:CreatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:CreatedById>
                <ns2:CreatedDate>2017-01-03T18:09:19.000+01:00</ns2:CreatedDate>
                <ns2:CreatorAccountId>2c92c0f9591b6ea701591c8511f65f26</ns2:CreatorAccountId>
                <ns2:CreatorInvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns2:CreatorInvoiceOwnerId>
                <ns2:CurrentTermPeriodType>Month</ns2:CurrentTermPeriodType>
                <ns2:InitialTermPeriodType>Month</ns2:InitialTermPeriodType>
                <ns2:InvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns2:InvoiceOwnerId>
                <ns2:IsInvoiceSeparate>false</ns2:IsInvoiceSeparate>
                <ns2:Name>A-S00013585</ns2:Name>
                <ns2:OriginalCreatedDate>2017-01-03T18:09:19.000+01:00</ns2:OriginalCreatedDate>
                <ns2:OriginalId>2c92c0f8592a62720159654e7bc8064f</ns2:OriginalId>
                <ns2:RenewalTermPeriodType>Month</ns2:RenewalTermPeriodType>
                <ns2:ServiceActivationDate>2017-01-03</ns2:ServiceActivationDate>
                <ns2:Status>Expired</ns2:Status>
                <ns2:SubscriptionStartDate>2017-01-03</ns2:SubscriptionStartDate>
                <ns2:TermStartDate>2017-01-03</ns2:TermStartDate>
                <ns2:TermType>EVERGREEN</ns2:TermType>
                <ns2:thm_item_id__c>5080</ns2:thm_item_id__c>
                <ns2:thm_locale_code__c>GR</ns2:thm_locale_code__c>
                <ns2:thm_partner_id__c>1272</ns2:thm_partner_id__c>
                <ns2:UpdatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:UpdatedById>
                <ns2:UpdatedDate>2017-01-03T18:10:17.000+01:00</ns2:UpdatedDate>
                <ns2:Version>1</ns2:Version>
            </ns1:records>
            <ns1:records xmlns:ns2="http://object.api.zuora.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xsi:type="ns2:Subscription">
                <ns2:Id>2c92c0f9592a69410159654f5e567a87</ns2:Id>
                <ns2:AccountId>2c92c0f9591b6ea701591c8511f65f26</ns2:AccountId>
                <ns2:AutoRenew>false</ns2:AutoRenew>
                <ns2:ContractAcceptanceDate>2017-01-03</ns2:ContractAcceptanceDate>
                <ns2:ContractEffectiveDate>2017-01-03</ns2:ContractEffectiveDate>
                <ns2:CreatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:CreatedById>
                <ns2:CreatedDate>2017-01-03T18:10:17.000+01:00</ns2:CreatedDate>
                <ns2:CreatorAccountId>2c92c0f9591b6ea701591c8511f65f26</ns2:CreatorAccountId>
                <ns2:CreatorInvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns2:CreatorInvoiceOwnerId>
                <ns2:CurrentTermPeriodType>Month</ns2:CurrentTermPeriodType>
                <ns2:InitialTermPeriodType>Month</ns2:InitialTermPeriodType>
                <ns2:InvoiceOwnerId>2c92c0f9591b6ea701591c8511f65f26</ns2:InvoiceOwnerId>
                <ns2:IsInvoiceSeparate>false</ns2:IsInvoiceSeparate>
                <ns2:Name>A-S00013585</ns2:Name>
                <ns2:OriginalCreatedDate>2017-01-03T18:09:19.000+01:00</ns2:OriginalCreatedDate>
                <ns2:OriginalId>2c92c0f8592a62720159654e7bc8064f</ns2:OriginalId>
                <ns2:PreviousSubscriptionId>2c92c0f8592a62720159654e7bc8064f</ns2:PreviousSubscriptionId>
                <ns2:RenewalTermPeriodType>Month</ns2:RenewalTermPeriodType>
                <ns2:ServiceActivationDate>2017-01-03</ns2:ServiceActivationDate>
                <ns2:Status>Active</ns2:Status>
                <ns2:SubscriptionStartDate>2017-01-03</ns2:SubscriptionStartDate>
                <ns2:TermStartDate>2017-01-03</ns2:TermStartDate>
                <ns2:TermType>EVERGREEN</ns2:TermType>
                <ns2:thm_item_id__c>5080</ns2:thm_item_id__c>
                <ns2:thm_locale_code__c>GR</ns2:thm_locale_code__c>
                <ns2:thm_partner_id__c>1272</ns2:thm_partner_id__c>
                <ns2:UpdatedById>2c92c0f8578d66580157952dfa8e0bf6</ns2:UpdatedById>
                <ns2:UpdatedDate>2017-01-03T18:10:17.000+01:00</ns2:UpdatedDate>
                <ns2:Version>2</ns2:Version>
            </ns1:records>
            <ns1:size>2</ns1:size>
        </ns1:result>
    </ns1:queryResponse>
</soapenv:Body>
</soapenv:Envelope>


Sending exactly the same notes again in the updated call didn't work either.
But whenever we send a different value as currently stored in the notes field the notes are visible in the frontend and the soap response!

Would you be kind enough to check this behaviour?

Thanks in advance!

Tags (2)
5 REPLIES 5
Highlighted
Support SME

Re: Lost subscription notes on update request

Hi @dkrueger , thanks for reporting this. I'll do some tests to investigate the described behaviour and I'll let you know my findings!



If you found my answer helpful, please give me a kudo ↑
Help others find answers faster by accepting my post as a solution √

Support SME

Re: Lost subscription notes on update request

Hi @dkrueger , thanks for your patience on this. I've done some testing around this, and I was able to replicate the described behaviour. Since this seems to be an inconsistency on the API framework level, could you forward this same request to support@zuora.com (addressing it to my attention) and then we could include our Developers in the investigation.

 

In the mean time, I can offer the following methods for handling similar scenarios:

 

A., Only providing "Notes" in the update() call, and skipping it from the subscribe()

B., Sending the very same update() call twice. According to my tests, if you simply duplicate the update() with the very same details, Notes will be populated after the second call (WARNING: MIGHT BE PERFORMANCE AFFECTING if you have a high call volume by default, not recommended)

 



If you found my answer helpful, please give me a kudo ↑
Help others find answers faster by accepting my post as a solution √

Tutor

Re: Lost subscription notes on update request

Hello Viktor,

thanks for your reply and checking this! I have sent the mail as requested, see #110940.

Due to performance reasons we want to avoid sending the request twice, so we came up with another workaround.
I will post this here just in case someone else has the same issue.


If you send in the update call a different value for the notes then the update is working fine. That's why we extend the current notes with a whitespace (not visible in the frontend / invoice) or remove existing whitespaces.
This is far from ideal, but at least we don't loose anything.

    /**
     * This is a workaround for a Zuora bug. The function adds or removes a whitespace to the notes fields
     * in order not to loose the notes whenever an updated request is performed on a subscription.
     *
     * @param string $subscriptionNotes
     * @return string
     */
    protected function toggleNotesWhitespace($subscriptionNotes)
    {
        $trimNotes = trim($subscriptionNotes);
        if (strlen($trimNotes) != strlen($subscriptionNotes)) {
            return $trimNotes;
        }
        else {
            return $subscriptionNotes . ' ';
        }
    }
Support SME

Re: Lost subscription notes on update request

Thanks for pointing this out @dkrueger, I've actually updated my response as you're right, duplicating might be affecting the performance and therefore is not suggested - and we really appreciate the workaround posted! Smiley Happy I'll take care of #110940.



If you found my answer helpful, please give me a kudo ↑
Help others find answers faster by accepting my post as a solution √

Support SME

Re: Lost subscription notes on update request

I'm happy to inform you a fix has been deployed for this issue, Notes' contents are not getting wiped any more!



If you found my answer helpful, please give me a kudo ↑
Help others find answers faster by accepting my post as a solution √