>
우리의 문자열 목록에서 텍스트 레이블을 반환 ListAttribute.GetLocalizedLabel 기능을 사용하는 동안우리는 '지정된 키가 사전에 존재하지 않았다'오류로 실행하고 있습니다. 흥미로운 점은 오류가 1/5 정도만 발생하고 매번 작동한다는 것입니다.

는 첨부 된 스크린 샷에서 보는 바와 같이 오류가 코드에서 발생되었지만, 당신이 볼 수, 매우 동일한 코드가 시계 창에 완벽하게 잘 작동합니다.

목록 속성의 스 니펫 :

public partial class DeliveryStatus
    {
        public class ListAttribute : PXStringListAttribute
        {
            public ListAttribute ()
                : base(
                new string[] { PendingSchedule, Scheduled, Invoiced, Paid, AddressingInProgress, PrintingInProgress, Delivered, AwaitingMailInstructions, Canceled, Stalled, MergeProofInProgress, MergeProofReceived, MergeProofApproval, ReadyToMail, MailingChangesNeeded, PendingDelivery, MergeProofNeedsChanges, PendingSupervisorApproval, PreMailing, PendingXMPieConfig, PendingMergeProofQual, ScheduledWithChanges, PendingXXXing, PreparingShipment, PreparingPickup, PendingRecyle, InvoicedOkToCharge, PendingAutoProcess, PendingEnvelopeAddressing },
                new string[] { PendingScheduleLabel, ScheduledLabel, InvoicedLabel, PaidLabel, AddressingInProgressLabel, PrintingInProgressLabel, DeliveredLabel, AwaitingMailInstructionsLabel, CanceledLabel, StalledLabel, MergeProofInProgressLabel, MergeProofReceivedLabel, MergeProofApprovalLabel, ReadyToMailLabel, MailingChangesNeededLabel, PendingDeliveryLabel, MergeProofNeedsChangesLabel, PendingSupervisorApprovalLabel, PreMailingLabel, PendingXMPieConfigLabel, PendingMergeProofQualLabel, ScheduledWithChangesLabel, PendingXXXingLabel, PreparingShipmentLabel, PreparingPickupLabel, PendingRecyleLabel, InvoicedOkToChargeLabel, PendingAutoProcessLabel, PendingEnvelopeAddressingLabel }) { }
        }

DAC 필드의 스 니펫 :

#region Status        
    [PXDBString]
    [PCMConstants.DeliveryStatus.List()]
    [PXDefault(PCMConstants.DeliveryStatus.PendingSchedule, PersistingCheck = PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName = "Status")]
    public string Status { get; set; }
    public class status : IBqlField { }
    #endregion

업데이트 : HB_ACUMATICA로 작업 한 후 우리가하고있는 코드가 우리의 요구에 비해 과도하다는 것을 알 수있었습니다. 문자열 목록에서 주어진 키에 대한 텍스트 레이블이 무엇인지 파악해야했습니다. . 우리는 사전 labelDic = 새로운 PCMConstants.DeliveryStatus.ListAttribute () ValueLabelDic를 수행하여 캐시 등을 사용하지 않고이를 달성 할 수있다;그런 다음 TryGetValue 또는 다른 방법을 사용하십시오.

  • 답변 # 1

    GetLocalizedLabel이 실행하는 동일한 코드를 사용하여 디버깅을 시도하십시오 :

    protected virtual void UsrDeliveryRequest_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
         if (e.Row == null) return;
         PXStringListAttribute pxStringListAttribute = sender.GetAttributesReadonly<UsrDeliveryRequest.status>(e.Row).OfType<PXStringListAttribute>().Single();
         string key = (string)sender.GetValue<UsrDeliveryRequest.status>(e.Row);
         if (pxStringListAttribute.ValueLabelDic.ContainsKey(key))
             PXTrace.WriteInformation(PXMessages.LocalizeNoPrefix(pxStringListAttribute.ValueLabelDic[key]));
         else
             PXTrace.WriteInformation("Missing Key, if current UsrDeliveryRequest.Status is valid it should be included in ValueLabelDic.");
    }
    
    

    내 추측으로는 UsrDeliveryRequest.Status에 충돌이 발생했을 때 포함되지 않은 값이 있다고 생각합니다.

    new string[] { PendingSchedule, Scheduled, Invoiced, Paid, AddressingInProgress, PrintingInProgress, Delivered, AwaitingMailInstructions, Canceled, Stalled, MergeProofInProgress, MergeProofReceived, MergeProofApproval, ReadyToMail, MailingChangesNeeded, PendingDelivery, MergeProofNeedsChanges, PendingSupervisorApproval, PreMailing, PendingXMPieConfig, PendingMergeProofQual, ScheduledWithChanges, PendingXXXing, PreparingShipment, PreparingPickup, PendingRecyle, InvoicedOkToCharge, PendingAutoProcess, PendingEnvelopeAddressing }
    
    

    상태 값이 허용 된 키 목록에 없으면 레이블을 가져 오지 않아야합니다. SetList를 사용하여 목록에 추가하거나 null과 같은 특수한 경우에는 무시하십시오.

  • 이전 python - 여러 범주 형 변수를 고르게 표현하여 데이터 프레임에서 목록 생성
  • 다음 excel vba - vba - api getsystemtime에서 경과 된 밀리 초를 사용한 성능 테스트