Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Можно ли заполнить параметр класса во время компиляции? / 10 сообщений из 10, страница 1 из 1
02.12.2010, 09:50
    #36990528
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
Или в рантайме его изменить? Интересует параметр RESOURCE у zen-страничек. Есть мысль указывать в качестве ресурса страницы имя ее класса - чтобы не возиться и руками не прописывать.
...
Рейтинг: 0 / 0
02.12.2010, 13:23
    #36991081
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
значение параметра класса, нужно до начала компиляции, потому как в скомпилированный код вставляется только само значение
...
Рейтинг: 0 / 0
02.12.2010, 17:01
    #36991751
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
kolesovИли в рантайме его изменить? Интересует параметр RESOURCE у zen-страничек. Есть мысль указывать в качестве ресурса страницы имя ее класса - чтобы не возиться и руками не прописывать.
Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ClassMethod BeforeCompile() [ CodeMode = generator, ServerOnly ]
{
	s obj = ##class(%Dictionary.ClassDefinition).%OpenId(%class)
	s fChanged =  0 
	for i= 1 : 1 :obj.Parameters.Count()
	{
		if (obj.Parameters.GetAt(i).Name = "RESOURCE") && (obj.Parameters.GetAt(i).Default '= %class)
		{
			s obj.Parameters.GetAt(i).Default = %class
			s fChanged =  1 
			q
		}
	}
	if (fChanged)
	{
		s obj.Modified =  1 
		s sc = obj.%Save()
	}
	k obj
}
...
Рейтинг: 0 / 0
03.12.2010, 04:06
    #36992408
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
Turk,

Спасибо. Отлично работает (добавил только создание ресурса в случае, если он изначально отсутствует, но это рюшечки ;)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.04.2014, 18:42
    #38620785
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
Упс.
Перестало это работать. Думаю с обновлением версии до 2014.1
Не можете подсказать, в чем проблема может быть?
...
Рейтинг: 0 / 0
21.04.2014, 18:47
    #38620788
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
kolesovУпс.
Перестало это работать. Думаю с обновлением версии до 2014.1
Не можете подсказать, в чем проблема может быть?Может что-то в вашем коде не так

приведу пример моего кода, который нормально работает на 2014.1
меняет TIMESTAMP, если он не соответствует формату, ставя время компиляцииClassMethod OnCompile() [ CodeMode = generator, Internal, ServerOnly = 1 ]
{
  s tSC=$$$OK
  
  s pvalue=$$$comMemberKeyGet(%class,$$$cCLASSparameter,"TIMESTAMP",$$$cPARAMdefault)
  i (pvalue'?14N) {
    $$$defMemberKeySet(%class,$$$cCLASSparameter,"TIMESTAMP",$$$cPARAMdefault,$tr($zdt($h,8,1)," :-/",""))
    s updateClass=##class("%Dictionary.ClassDefinition").%OpenId(%class)
    s updateClass.Modified=0
    d updateClass.%Save()
    d updateClass.%Close()
   }

  quit tSC
}
...
Рейтинг: 0 / 0
21.04.2014, 18:49
    #38620790
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
Сори. Перемудрил на ночь(
...
Рейтинг: 0 / 0
21.04.2014, 19:15
    #38620803
Александр Коблов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
kolesov,

В 2014.1 вот так ещё можно (может и раньше можно было):Class Test.ParamComp Extends %RegisteredObject
{

Parameter Val = {$H};

}
http://docs.intersystems.com/cache20141/csp/docbook/DocBook.UI.Page.cls?KEY=GCNV_R2014_1#GCNV_C135859

Код: plaintext
1.
USER>w ##class(Test.ParamComp).#Val
63298,68827

По-другому — можно вычислять значение в Runtime -- COSEXPRESSION:
http://docs.intersystems.com/cache20141/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_classes#GOBJ_classes_parametersGOBJ_classes_parametersexpressions
...
Рейтинг: 0 / 0
22.04.2014, 09:34
    #38621096
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
kolesov ,
Class my.c Extends %RegisteredObject
{

Parameter v As CLASSNAME = {%class};

}
Код: plaintext
1.
USER>w ##class(my.c).#v
my.c
...
Рейтинг: 0 / 0
23.04.2014, 19:15
    #38623635
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли заполнить параметр класса во время компиляции?
servit,

Спасибо. Попробую.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Можно ли заполнить параметр класса во время компиляции? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]