Как вы должны использовать атрибут PXDBCryptString для расшифровки значения - PullRequest
0 голосов
/ 01 декабря 2018

Я использую приведенное ниже определение в ЦАП, ожидая, что результаты будут зашифрованы в базе данных, но отображаются как расшифрованные в пользовательском интерфейсе или коде в графическом классе.В результате я получаю зашифрованное значение в пользовательском интерфейсе и коде.Я не могу понять, как я должен расшифровать возвращаемое значение.

Я пытаюсь найти дополнительную информацию о том, как использовать этот атрибут, однако 2018R1-AcumaticaFramework-DevelopmentGuide.pdf содержит только скудную информацию.Он имеет следующую ссылку PXDBCryptLink https://help.acumatica.com/Main?ScreenId=ShowWiki&pageid=176377a7-4d01-786c-a56d-e17ccbf188f0, но эта ссылка больше не доступна.Я также не могу найти что-либо в документации T200.

У кого-нибудь есть информация о том, как правильно расшифровать значение, использующее этот атрибут?

Заранее спасибо

    #region C2PAPIKEY
    public abstract class c2PAPIKEY : PX.Data.IBqlField
    {
    }
    protected string _C2PAPIKEY;
    //[PXDBString(50, IsUnicode = true)]
    //not having any luck getting these encryption attributes to work
    //the value coming back is always encrypted regardless of the
    //IsVeiwDecrypted being set to true
    //[PXRSACryptString(50, IsUnicode = true, IsViewDecrypted = true)]
    [PXDBCryptString(50, IsUnicode = true, IsViewDecrypted = true)]
    [PXDefault("")]
    [PXUIField(DisplayName = "Click to Pay API Key")]
    public virtual string C2PAPIKEY
    {
        get
        {
            return this._C2PAPIKEY;
        }
        set
        {
            this._C2PAPIKEY = value;
        }
    }
    #endregion

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я обнаружил, что проблема, с которой я столкнулся, заключалась в том, что я не предоставил достаточно места в базе данных для хранения зашифрованного значения.Ключ из 32 символов потребует 88 символов для хранения полной зашифрованной строки.У меня было поле, определенное как nvarchar (50), поэтому зашифрованное значение было усечено, и механизм шифрования не смог расшифровать значение.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 01 декабря 2018

Я посмотрел несколько примеров и считаю, что значение должно быть явно расшифровано в кеше.

Это можно сделать на графике с помощью обработчика событий RowSelected:

// Make sure DAC is of the type that holds the C2PAPIKEY field
public virtual void DAC_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
{
    PXDBCryptStringAttribute.SetDecrypted<DAC.c2PAPIKEY>(sender, e.Row, true);
}
...