11.09.2011, 12:10 | #1 |
Участник
|
SQL: тип "Список сторон"
в sql запросе нужно связать две таблицы - звонок и юзер - условием 'если звонок адресован юзеру'.
со стороны юзера есть userid, со стороны звонка - поле to (приходится в квадратные скобки его, дабы не считалось ключевым словом), которое является неким мифическим типом "список сторон". обращения вида call.[to][1] = user.userid не работают (ругается на синтаксис вокруг единицы). на нулевую индексацию ругается так же. вопрос: как оттуда выдернуть первое поле, чтобы проверить адресата? или, может быть, есть что то вроде if ([to].contains(userid))? гугл по запросу "crm 'список сторон'" дает 4 ссылки, по 'sql 'список сторон'' - 8, из них полезных ни одной. все, что нашел по массивам в sql, предлагает обращение чуть ли не через vba с описанием собственных контейнеров под то-что-вернет-запрос. |
|
11.09.2011, 17:18 | #2 |
Moderator
|
Вы простите, но массивы и индексаторы в SQL - это сильно! Про "мифический список сторон" - тем более убило. Я думаю, вам нужно почитать про синтаксис SQL, про разработку отчетов для CRM и вообще найти разработчика!
А начать нужно со следующего: Изучение конструкции Join, свезей Many to Many, диаграмм структуры базы CRM.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
11.09.2011, 21:48 | #3 |
Участник
|
Вы простите, но я был удивлен не меньше вашего. Я вполне знаю что такое join - просто разработчик, который делал знакомым базу, оказался, несмотря на свои масштабы и красивые презентации, довольно гнусным - там отдельные таблицы под сущность - кодгорода, сущность - город, сущность - почтовый индекс; около 40 полей адреса, заполненное из которых только одно и т д. Делали эту базу упоротые наркоманы (причем переделать все нельзя - простой обойдется слишком дорого), а мне приходится помогать разгрести завалы.
Я не знаю, сделали ли они сами тип данных "список сторон", либо это один из стандартных типов crm. Я не смог за два дня гугления найти инфы по этому поводу ни в рунете, ни в всеобщем. Сюда я обратился, чтобы мне либо сказали "это дефолтный тип crm, инфа по нему здесь", либо сказали "это developer-defined и ищи его в settings->config->blablabla->...->datatypes.src", либо сказали "это developer-defined и пытай тех кто его создал". Судя по тому, как с полями этого типа взаимодействуют формы, поле данного типа содержит идентификаторы записей адресатов в их таблицах, но их больше одного, и само поле не является идентификатором (хотя содержит его). @Enot Вы, безусловно, умны, раз имеете такое количество плашек и статус модера, но я постил сюда сообщение не потому, что меня в гугле забанили. |
|
11.09.2011, 23:29 | #4 |
Чайный пьяница
|
Цитата:
По умолчанию к контакту/компании/лиду цепляется по 2 адреса. Полей много, но ничего не поделаешь - таков базовый функционал. Если это стандартный функционал, то, да, наркоманы редкостные - корпорация Майкрософт. Цитата:
Цитата:
Всё справедливо. Артём действительно один из самых талантливых консультантов-разработчиков, которых я знаю.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
12.09.2011, 12:46 | #5 |
Moderator
|
Я бы помог вам с запросом, но, к сожалению, сейчас нет доступа к живой системе. Возьмите один из стандартных отчетов по Действиям, загрузите его, откройте в студии и посмотрите как устроен запрос. Ничего особо хитрого вы там не найдете.
Если кратко: есть родительская сущность (таблица) Дествие, есть таблица-перемечение activityparty, в которой указаны сылки на стороны Действия, их тип, и, кажется, поле привязки. Иными словами получается селект аля: Выбери все действия, на котрые ссылается сторона действия, тип связи которой - пользователь (systemuser) и поле связи - "to", причем systemuserid = {guid}. Как-то так. Пишу по памяти, так что могу в чем-то ошибаться. В любом случае, как сказал Андрей, информация о том как устроены Действия есть в SDK, так что было бы желание, а разобраться - дело времени. p.s. В известных мне породах SQL синтаксиса нет конструкций вида атрибут[порядковый номер]. Мой сарказм был обращен на это. Это я к тому, что не стоит сразу обзывать наркоманами тех людей, чей замысел вы не поняли. Вот когда поймете - тогда да, обзывайтесь.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
15.09.2011, 22:00 | #6 |
Участник
|
за activityparty спасибо. вот, собстно, то, что я нарыл по данному поводу:
имеем класс(таблицу) phonecall, в нем сидит поле to, которое имеет свое значение равным набору активитипать, у активитипать в свою очередь есть поле активитипатяайди. мсдн говорит следующее по поводу to: Цитата:
The value of this property is an activityparty array(массив) type.
на мсдн даже приведен пример кода: Код: [C#] public activityparty[] to {get; set;} //скобочки в шарпах означают массив phonecall.to[i].activitypartyid вот только в sql массивов нет, а мне надо по этому полю залинковать звонок с организацией, которой этот звонок идет, причем sql запросом ввиду того что репортбилдер, насколько я знаю, c# код не воспримет. я собирался писать что-то в духе Код: select * from phonecalls inner join leads on phonecall.to[0].activitypartyid = lead.leadid правда, я изначально писал phonecall.to[0] = ..., но возможности протестить .activitypartyid нет - удаленный комп лежит мертвым сном (ибо база доступна только из локали) из разговора с человеком, которому собственно и помогаю - cross join'ы работают криво, т к связки между таблицами есть не везде (а точнее, их почему-то почти нет), и сами таблицы делали непонятно как. Этот же человек мне сообщил, что следует юзать иннерджойны, потому что они работают хотя бы как-то. Если совсем уж честно, то синтаксис и структуру sql я знаю лишь в общих чертах. знаю про пару видов джойнов, апдейты, делиты и инсерты, и то со словарем в лице гугла. Однако что делать с данной бедой, гугл, к сожалению, не сообщает (либо приводит сэмплы обращений к бд мало того что из шарпа или бейсика, так еще и к базе в файле) |
|
16.09.2011, 00:49 | #7 |
Moderator
|
Вот вы знаете, три раза писал ответ и трижды его стирал... Вам правда повезло, что я не ответил
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
16.09.2011, 08:56 | #8 |
Чайный пьяница
|
Активитипати массив только в объектной модели CRM. Неужели так тяжело посидеть и посмотреть на то как CRM организован со стороны базы? Может пару запросов профайлером снять...
Вот примерный вид запроса для вашего случая: Код: Select * From FilteredPhoneCall p Inner Join FilteredActivityParty a on p.activityid = a.activityid and a.partyid = <ID of company>
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 16.09.2011 в 08:59. |
|
Теги |
sql, список сторон |
|
|