OpenIso8583. Net Добавление немного в шаблон - PullRequest
0 голосов
/ 23 марта 2020

Библиотека была перемещена несколько лет назад go, и ссылка, которую я нашел для вики, устарела.

Я бы хотел добавить бит 127 в класс Iso8583. Я использую приведенный ниже код, но программа умирает в методе Pack (), вызываемом из ToMsg (). Я не знаю, какое значение поместить в поле длины. Поле является LLLVAR с максимальной длиной 5, то есть длина 5, или 8, или 999? Все три значения выдают исключение в Pack ().

Что мне нужно добавить, чтобы заставить работать бит 127?

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OpenIso8583Net;
using OpenIso8583Net.FieldValidator;
using OpenIso8583Net.Formatter;
using OpenIso8583Net.LengthFormatters;

namespace MyLink
{

    public class MyIso8583 : Iso8583
    {
        public new class Bit : Iso8583.Bit
        {    
            public const int _127_DISCOVER_VERSION = 127;
        }

        // First you need to customise the template
        // The message 
        private static readonly Template template;


        static MyIso8583()
        {

            // Get the default template for the Iso8583 class
            template = GetDefaultIso8583Template();

            // change template to add bit 127 LLLVAR(5)

            template.Add(Bit._127_DISCOVER_VERSION, FieldDescriptor.AsciiVar(3, 5, FieldValidators.AlphaNumericSpecial));

        }

        // override the base class using the template 
        public MyIso8583() : base(template)
        {

        }

        protected override IField CreateField(int field)
        {

            return base.CreateField(field);
        }

    }
}

РЕДАКТИРОВАТЬ 3/24/20: я добавил переопределение для Bit и CreateField. Я хочу, чтобы новый бит 127 действовал как LLLVAR по умолчанию длины 5.

1 Ответ

0 голосов
/ 24 марта 2020

Этот код работает. На самом деле может быть необязательно добавлять переопределение CreateField.

...