AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2005, 17:31   #1  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Hi.

nado sdelat' export/import bankovskih platezhej cherez CustVendOutPaym v XML (UTF kodirovka)

Problema v tom, sto fail otkrivajetsja sherez (eto tak v super-klassah)
<div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]return[/color] [color=:blue]new[/color] AsciiIo(_filename, _mode);</div>

Sootvetstvenno kodirovka XML headera nesootvetstvujet kodirovke pishushihsja dannih.

Kak bit'.. !?

PS: edinstvennoe pisat' svoju f-ju dlja perevoda simvolov iz non-utf v UTF.
mozet ispolzovat' ICONV lib-u ?
Старый 05.07.2005, 09:43   #2  
Ruff
Гость
 
n/a
Решал похожую задачу для DBF-файлов. Выкрутился вот таким хитрым способом: подменил экземпляр AsciiIo экземпляром СВОЕГО класса, умеющего работать с DBF. Трюк правда основан на недокументированной особенности интерпретатора Х++ (см. обсуждение), но он прекрасно работает!

В Вашем случае можно сделать примерно следующее:
1. В наследнике CustVendOutPaym объявить переменную нужного Вам класса Например: <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]class[/color] VendOutPaym_MY_BANK [color=:blue]extends[/color] VendOutPaym
{
   XMLDocument fileXML;
}</div>
2. В наследнике CustVendOutPaym перекрыть метод file() следующим образом:
<div class='XPPtop'>X++</div><div class='XPP'>XMLDocument file()
{
   [color=:blue]return[/color] fileXML;
}</div>
3. В наследнике CustVendOutPaym в методе open() произвести открытие XML-файла необходимым образом (то есть инициализировать объект fileXML).

4. В наследниках CustVendOutPaymRecord, также должен быть объявлен объект требуемого нам класса (см. п. 1).

5. Осталось осуществить передчу этого объекта из наследника CustVendOutPaym наследникам CustVendOutPaymRecord. Это происходит, как Вы правильно заметили, в супер-классах (см. метод generatePaymentLines() класса CustVendOutPaym). Нам остается только перекрыть метод setFile() в наследнике CustVendOutPaymRecord:
<div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]void[/color] setFile(XMLDocument _file)
{
   fileXML = _file;
}</div>

P.S.: Способ, конечно, выглядит запутанным. Возможно, Вы предпочтете перекодировку в UTF. Но, по-моему, с XML все-таки удобнее и правильнее работать через специальные классы, чем городить огород через AsciiIo.
Старый 05.07.2005, 15:09   #3  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Pasiba. takaja ideja bila ispolzovat' XML klasi.

A eto 100% esli ukazhu XML-u UTF kodirovku i on budet pisat' v ukazannoj kodirevke ? malo li gde che-go...
Старый 05.07.2005, 17:55   #4  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Chego-to ne poluchajetsja ... dumal sto etot hack srabotaet.. no super-class nehochet prinimat' parametr XMLDocument kak AsciiIo v metode SetFile v klasse vendOutPaymRecord ...

metod v VendOutPaym_BANK_NAME
<div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]void[/color] setFile(XMLDocument _file)
{
   fileXML = _file;
}</div>

vrode vse sdelal kak nado...

PS: vendOutPaymRecord sozdajetsja konstruktorom, poetomu vo vremja kompiljacii X++ interpr. nevidit, sto setFile perepisan... skoree vsego..

Код:
vendOutPaymRecord = this.constructRecord(ledgerJournalTrans.paymMode, ledgerJournalTrans.paymSpec);
Старый 05.07.2005, 18:02   #5  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Mh.. vrode vse srabotalo

<div class='XPPtop'>X++</div><div class='XPP'>Object o;

o = this.file(); vendOutPaymRecord.setFile(o);</div>
Старый 06.07.2005, 08:20   #6  
Ruff
Гость
 
n/a
Цитата:
Сообщение от Delfins
PS: vendOutPaymRecord  sozdajetsja konstruktorom, poetomu vo vremja kompiljacii X++ interpr. nevidit, sto setFile perepisan... skoree vsego..
От того, где и как создается экземпляр, доступность его методов не должна зависеть. Скорее всего компилятор очередной раз сглючил , и просто нужно было выполнить инкрементную компиляцию.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:04.