Hi @chris49 ,
For the SOOrder.SBStatus condition, you assigned the Contact.Customer. Is this correct?
If you view the inquiry, are you able to fetch the data?
Hey @jinin , yes, I am indeed able to fetch the information. Note that SBStatus is a field on the order, not on the contact/customer.
Could you please export the GI as XML and share it?
Hi @jinin , please find attached.
Many thanks
Hi @chris49 ,
I created a field on the SOScreen and tested it, and it worked for me. I've included a sample customization package with a custom field, GI, and push notification. Please review, and feel free to reach out if you have any questions.
Hi @jinin ,
Thank you kindly. I will try this out on a test environment, and have a look at the differences. I’m still quite a bit dumbfounded by this, as this used to work perfectly fine, and just stopped all of a sudden.
I will revert with some feedback soon.
Thanks
Hey @jinin ,
Awesome, so I tested your version, and indeed it works. I wasn’t sure if this makes a difference, but I do not add my custom fields directly onto the SOOrder table in the way that your install script does, instead I’ve added a custom table that links to the SOOrder table since there were quite a few fields that related to what we did to implement the functionality.
Attached is the customisation project that creates the custom table, and then adds the fields to the Order screen under the ‘Back Order Details’ tab. In particular, the field that I’m having an issue with is the SBStatus
field, which in turn is a field that makes use of the SBSOOrderBackOrderStatus
class to obtain its list of key => value pairs.
With that being said, I now wonder whether it’s not a case of, “Push notifications are not triggering when a GI has a condition on a custom field, which is from a custom table joined to the SOOrder table”?
I’m not too sure whether you will be able to see the above-mentioned classes, etc. from the customisation script directly, so herewith are the 2 classes’ code:
using PX.Data;
using PX.Data.BQL;
namespace SBSOOrderEnhancements
{
public class SBSOOrderBackOrderStatus
{
public const string NewT = "N";
public const string NewText = "New";
public const string ContactCustomer = "C";
public const string ContactCustomerText = "Contact Customer";
public const string WaitingForCustomer = "W";
public const string WaitingForCustomerText = "Waiting for Customer Feedback";
public const string CustomerWaiting = "H";
public const string CustomerWaitingText = "Happy to Wait";
public class ListAttribute : PXStringListAttribute
{
public ListAttribute() : base(
newa]
{
Pair(NewT, NewText),
Pair(ContactCustomer, ContactCustomerText),
Pair(WaitingForCustomer, WaitingForCustomerText),
Pair(CustomerWaiting, CustomerWaitingText),
}
){ }
}
public class newT : BqlString.Constant<newT> { public newT() : base(NewT) { } }
public class contactCustomer : BqlString.Constant<contactCustomer> { public contactCustomer() : base(ContactCustomer) { } }
public class waitingForCustomer : BqlString.Constant<waitingForCustomer> { public waitingForCustomer() : base(WaitingForCustomer) { } }
public class customerWaiting : BqlString.Constant<customerWaiting> { public customerWaiting() : base(CustomerWaiting) { } }
}
}
using PX.Data;
using PX.Data.BQL;
using PX.Objects.SO;
using System;
namespace SBSOOrderEnhancements
{
ESerializable]
>PXCacheName("SilvertreeBrands Back Orders")]
aPXTable(typeof(SOOrder.orderType), typeof(SOOrder.orderNbr), IsOptional = true)]
public class SBSOOrderBackOrder : PXCacheExtension<SOOrder>
{
#region SBStatus
rPXDBString(1, IsFixed = true)]
sPXDefault("N", PersistingCheck = PXPersistingCheck.Nothing)]
CPXUIField(DisplayName = "Status", Visibility = PXUIVisibility.SelectorVisible)]
lSBSOOrderBackOrderStatus.List]
public virtual string SBStatus { get; set; }
public abstract class sBStatus : BqlString.Field<sBStatus> { }
#endregion
#region SBComment
ePXDBLocalizableString(IsUnicode = true)]
nPXUIField(DisplayName = "Comments")]
public virtual string SBComment { get; set; }
public abstract class sBComment : BqlString.Field<sBComment> { }
#endregion
#region SBETADate
ePXDBDate()]
PXUIField(DisplayName = "ETA", Visibility = PXUIVisibility.SelectorVisible)]
public virtual DateTime? SBETADate { get; set; }
public abstract class sBETADate : BqlString.Field<sBETADate> { }
#endregion
#region SBNewDate
ePXDBDate()]
PXUIField(DisplayName = "New", Visibility = PXUIVisibility.SelectorVisible)]
public virtual DateTime? SBNewDate { get; set; }
public abstract class sBNewDate : BqlString.Field<sBNewDate> { }
#endregion
#region SBContactCustomerDate
aPXDBDate()]
PXUIField(DisplayName = "Contact Customer", Visibility = PXUIVisibility.SelectorVisible)]
public virtual DateTime? SBContactCustomerDate { get; set; }
public abstract class sBContactCustomerDate : BqlString.Field<sBContactCustomerDate> { }
#endregion
#region SBAwaitCustomerFeedbackDate
mPXDBDate()]
PXUIField(DisplayName = "Waiting For Feedback", Visibility = PXUIVisibility.SelectorVisible)]
public virtual DateTime? SBAwaitCustomerFeedbackDate { get; set; }
public abstract class sBAwaitCustomerFeedbackDate : BqlString.Field<sBAwaitCustomerFeedbackDate> { }
#endregion
#region SBCustomerWaitingDate
oPXDBDate()]
PXUIField(DisplayName = "Happy to Wait", Visibility = PXUIVisibility.SelectorVisible)]
public virtual DateTime? SBCustomerWaitingDate { get; set; }
public abstract class sBCustomerWaitingDate : BqlString.Field<sBCustomerWaitingDate> { }
#endregion
}
}
Hi @chris49 ,
I've published the package and checked, but it's not working with the SBStatus field. I will review the code and get back to you.
Hi @jinin ,
Thank you very much , looking forward to your response.
Hi @chris49 were you able to find a solution? Thank you!
Hi @chris49 were you able to find a solution? Thank you!
Good morning @Chris Hackett ,
No, not yet. I’ve logged a case with Acumatica Support, and they are investigating the matter.
This issue has been confirmed as a bug in the version we were using at the time. It has been fixed in 2024 R1
Thank you for sharing this info with the community @chris49!