Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Выполнение метода по указанию в URL / 25 сообщений из 25, страница 1 из 1
21.01.2008, 10:59
    #35075144
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Не спрашивайте, зачем :)

Нужно организовать выполнение метода по указанным в URL имени класса и метода, примерно так:
...?Class=Person&Template=CreateForm
такой запрос приходит на "центральный" %CSP.Page-объект, который затем должен из базы у класса Person вызвать метод CreateForm (который, типа, рисует форму создания объекта).

Так вот, главная непонятка, как из string-а получить указатель на класс или метод (скомпилированные)? Есть такой системный метод?

Заранее спасибо.
...
Рейтинг: 0 / 0
21.01.2008, 11:07
    #35075181
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
"Заводиться" справочник соотвествия между именованием шаблона и соотвествием класса и метода в нем.

Хоть в код зашивайте справочник - хоть таблицу делайте - по шаблону определяете наименования
а потом

[/src]d $zobjclassmethod("имя класа","имя метода",параметр1,параметр2 ....)
Код: plaintext
1.
2.
3.
4.
Указатели это в С/С++ и т.д. - в Каше и то и другое стринги.

Естесвенно вам никто не мешает проверить наличие скомпилированного класса

if ##class(%CompiledClass).%ExistsId(("имя класа") {
...
}
[src]
...
Рейтинг: 0 / 0
21.01.2008, 11:08
    #35075186
Зет
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Ptn у тебя форматирование глючит
...
Рейтинг: 0 / 0
21.01.2008, 11:11
    #35075208
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad Rat , значения перемнных удобнее "разобрать" в JS, а потом уже передать их в Каше на "выполнение"...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.01.2008, 11:16
    #35075227
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Справочник не пойдёт, нужно чтобы кто-нить потом мог новые шаблоны добавлять, а "центральный" класс не перекомпилировать
...
Рейтинг: 0 / 0
21.01.2008, 11:33
    #35075312
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Как вариант
Код: plaintext
1.
2.
3.
4.
PRIMER(Class,Metod)
 n com,case
 s com="s case=##class("_Class_")."_Metod_"()"
 x @com
 q
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.01.2008, 11:39
    #35075343
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatСправочник не пойдёт, нужно чтобы кто-нить потом мог новые шаблоны добавлять, а "центральный" класс не перекомпилировать

Как это не пойдет ??? как раз справочник-на-таблице тут ой как нужен ... именно с ним ничего перекомпилировать не нужно
...
Рейтинг: 0 / 0
21.01.2008, 11:40
    #35075347
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
krvsaКак вариант
Код: plaintext
1.
2.
3.
4.
PRIMER(Class,Metod)
 n com,case
 s com="s case=##class("_Class_")."_Metod_"()"
 x @com
 q
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

$zobjclassmethod делает ровно тоже самое - только еще и параметры можно передовать
...
Рейтинг: 0 / 0
21.01.2008, 11:47
    #35075379
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
krvsa

А указанный метод - не бьезопасен для вставки скрипта ... вот передасть тебе кто нить в качестве имени метода
Код: plaintext
1.
d PRIMER("Class.Class","Metod() kill ^AllHumans s ^AllHumans=##class(%CSP.Page).%PackageName")
и привет всем людям
...
Рейтинг: 0 / 0
21.01.2008, 12:09
    #35075465
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Ptn , безопастностью там и не пахнет.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
21.01.2008, 12:41
    #35075593
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
За безопасностью будет следить как раз этот метод класса %CSP.Page - достаточно тупо проверить символы в строке какие. А справочник не подходит, потому что при добавлении нового шаблона пользователь вынужден будет его еще в какой-то там табличке зарегистрировать. Нужно чтобы было предельно просто: зашёл в студию, открыл класс, добавил метод визардом, написал туда html-кода, скомпилировал - и готово, можно делать на него ссылки. Короче, надо продемонстрировать крутость Кащея, хочу на нём продублировать функциональность одной системы, которая тормозная и глючная.

krvsa, а это на чём? На кащейском языке можно тоже самое, пжлст? Я только учусь...
...
Рейтинг: 0 / 0
21.01.2008, 13:32
    #35075811
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Кстати, это как надо так хитро вызывать методы, чтобы галочка "Private" влияла? И на что она вообще влияет? Я пока что, сколько с Cache работаю, ну правда это не сильно долго, никакой разницы не заметил.
...
Рейтинг: 0 / 0
21.01.2008, 13:34
    #35075822
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad Ratа это на чём? На кащейском языке можно тоже самое, пжлст? Я только учусь...
Кащеистей уже некуда. Писал с использованием М-технологий онли.
...
Рейтинг: 0 / 0
21.01.2008, 13:38
    #35075844
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatКстати, это как надо так хитро вызывать методы, чтобы галочка "Private" влияла?
Сам не пользосался... Но суть вроде такая. Приватные методы могут вызывать только методы этого же класса.
...
Рейтинг: 0 / 0
21.01.2008, 13:42
    #35075858
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
А ссылку в мануал по этим "технологиям" можно? Знаю тока Set, Do, Quit и т.п. пока, а эти ваши конструкции больше ассемблер напоминают... Это что, сокращения какие-то?
...
Рейтинг: 0 / 0
21.01.2008, 13:48
    #35075888
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Ну "суть" инкапсуляции я тоже знаю. :) Только через ##class() из других классов выполняются любые методы, и публичные, и приватные. Видимо есть какой-то ещё способ выполнения, на которые эта галочка влияет?
...
Рейтинг: 0 / 0
21.01.2008, 13:51
    #35075900
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatЗа безопасностью будет следить как раз этот метод класса %CSP.Page - достаточно тупо проверить символы в строке какие. А справочник не подходит, потому что при добавлении нового шаблона пользователь вынужден будет его еще в какой-то там табличке зарегистрировать. Нужно чтобы было предельно просто: зашёл в студию, открыл класс, добавил метод визардом, написал туда html-кода, скомпилировал - и готово, можно делать на него ссылки. Короче, надо продемонстрировать крутость Кащея, хочу на нём продублировать функциональность одной системы, которая тормозная и глючная.

krvsa, а это на чём? На кащейском языке можно тоже самое, пжлст? Я только учусь...

То есть вы считаете что пользователь это тот кто в студии классы компиляет ? Ну воля ваша ....


Можно пойти по другому пути - создается абстрактный класс - унаследованный от %CSP.Page - в нем определяем параметр TEMPLATENAME.... плюс можем добавить метод-генератор - который при компиляции конечного класса - записывает соотвествие имя_класс=имя_параметра в некий глобал.

Далее ... основная страница - может тупо выбирать все классы унаследованные от этого абстрактоно класса - и вызывать того у кого TEMPLATENAME совпадет с переданным ... для ускорения можно использовать поиск по глобалу - из генератора, который так же может дополнительно запоминать имена некоторых методов.

Пользователь создает класс - унаследованный от базаваго класса - переопределяет параметр TEMPLATENAME - и вуаля....
...
Рейтинг: 0 / 0
21.01.2008, 13:58
    #35075917
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatА ссылку в мануал по этим "технологиям" можно? Знаю тока Set, Do, Quit и т.п. пока, а эти ваши конструкции больше ассемблер напоминают... Это что, сокращения какие-то?

Документация идет вместе с любой версией Cach'e - ссылка в контестном меню - вам нужен раздел Reference Material -> Caché ObjectScript Reference

--- еще комментарий к приведенному выше примеру - если включена автокомпиляция
то юзер может и просто создовать файлики

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<csp:class super="InterFace.Templates">
<csp:parameter name="TEMPLATENAME" value="TableView">
<html>
</html>
<csp:method name=ShowTable arguments="" returntype="">
&JS<
<table border= 1 >
<tr><td></td></tr>
</table>
>
</csp:method>

...
Рейтинг: 0 / 0
21.01.2008, 14:05
    #35075946
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatЭто что, сокращения какие-то?
В М-технологии (кои поддерживает Каше) можно вызывать команды и функции по одной-двум начальным буквам, что я и делаю...
...
Рейтинг: 0 / 0
21.01.2008, 14:07
    #35075957
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Ну да, категория пользователей такая - автор ресурса. Так сказать, почти программист. Ему надо дать в руки инструмент, с которым он может клепать классы и шаблоны интерфейса к ним. Простой по возможности. Хочу показать, что Каше удобнее и "гибше", чем существующая система.

Этот способ тоже не пойдёт - у одного класса может быть сколько угодно разных методов-шаблонов, а не один. Короче, нельзя пользователя заставлять прописывать связь "имя метода - метод" - ни табличкой, ни свичкейсом, ни ещё как-нибудь, она должна автоматически делаться, точнее "физически" не должно быть никакой связи.
...
Рейтинг: 0 / 0
21.01.2008, 14:23
    #35076023
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Про передачу параметров в URL почитайте про request в документации или в CSP Quick Start на русском.

Что касается, программного вызова методов произвольного класса почитайте:
Using the Caché $ZOBJxxx Intrinsic Functions

Хотя сама задумка выглядит достаточно небезопасной...


Вадим
...
Рейтинг: 0 / 0
21.01.2008, 14:27
    #35076043
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatНу да, категория пользователей такая - автор ресурса. Так сказать, почти программист. Ему надо дать в руки инструмент, с которым он может клепать классы и шаблоны интерфейса к ним. Простой по возможности. Хочу показать, что Каше удобнее и "гибше", чем существующая система.

Этот способ тоже не пойдёт - у одного класса может быть сколько угодно разных методов-шаблонов, а не один. Короче, нельзя пользователя заставлять прописывать связь "имя метода - метод" - ни табличкой, ни свичкейсом, ни ещё как-нибудь, она должна автоматически делаться, точнее "физически" не должно быть никакой связи.

Ну ...вопервых страннен сам факт что вы собираетесь доказывать то чего в чем неуверены ... но дело ваше..


Что до " ... "физически" не должно быть никакой связи." - а как вы вообще это хотите реализовывать? или как это реализовано в старой системе ?

Метод вызвать можно - пример даден - а вот как вы определите что именно этот метод и вот этот класс непонятно .....
...
Рейтинг: 0 / 0
21.01.2008, 14:30
    #35076059
Mad Rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
А, понял всё, спасибо всем :) Мне всего-навсего нужен был оператор XECUTE :)
...
Рейтинг: 0 / 0
21.01.2008, 18:30
    #35077066
Выполнение метода по указанию в URL
Mad RatА, понял всё, спасибо всем :) Мне всего-навсего нужен был оператор XECUTE :)
Может вам попробовать класс с методами обявить как веб-сервис? И проецирование сразу есть и аргументы можно в виде параметров задавать?
...
Рейтинг: 0 / 0
21.01.2008, 19:26
    #35077168
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение метода по указанию в URL
Mad RatА, понял всё, спасибо всем :) Мне всего-навсего нужен был оператор XECUTE :)

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


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