| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			SQL: тип "Список сторон"
			 
			
			в sql запросе нужно связать две таблицы - звонок и юзер - условием 'если звонок адресован юзеру'. 
		
		
		
		
		
		
		
	со стороны юзера есть userid, со стороны звонка - поле to (приходится в квадратные скобки его, дабы не считалось ключевым словом), которое является неким мифическим типом "список сторон". обращения вида call.[to][1] = user.userid не работают (ругается на синтаксис вокруг единицы). на нулевую индексацию ругается так же. вопрос: как оттуда выдернуть первое поле, чтобы проверить адресата? или, может быть, есть что то вроде if ([to].contains(userid))? гугл по запросу "crm 'список сторон'" дает 4 ссылки, по 'sql 'список сторон'' - 8, из них полезных ни одной. все, что нашел по массивам в sql, предлагает обращение чуть ли не через vba с описанием собственных контейнеров под то-что-вернет-запрос.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вы простите, но массивы и индексаторы в SQL - это сильно! Про "мифический список сторон" - тем более убило. Я думаю, вам нужно почитать про синтаксис SQL, про разработку отчетов для CRM и вообще найти разработчика! 
		
		
		
		
		
		
			А начать нужно со следующего: Изучение конструкции Join, свезей Many to Many, диаграмм структуры базы CRM. 
				__________________ 
		
		
		
		
	http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]()   MS Certified Dirty Magic Professional
			 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вы простите, но я был удивлен не меньше вашего. Я вполне знаю что такое join - просто разработчик, который делал знакомым базу, оказался, несмотря на свои масштабы и красивые презентации, довольно гнусным - там отдельные таблицы под сущность - кодгорода, сущность - город, сущность - почтовый индекс; около 40 полей адреса, заполненное из которых только одно и т д. Делали эту базу упоротые наркоманы (причем переделать все нельзя - простой обойдется слишком дорого), а мне приходится помогать разгрести завалы. 
		
		
		
		
		
		
		
	Я не знаю, сделали ли они сами тип данных "список сторон", либо это один из стандартных типов crm. Я не смог за два дня гугления найти инфы по этому поводу ни в рунете, ни в всеобщем. Сюда я обратился, чтобы мне либо сказали "это дефолтный тип crm, инфа по нему здесь", либо сказали "это developer-defined и ищи его в settings->config->blablabla->...->datatypes.src", либо сказали "это developer-defined и пытай тех кто его создал". Судя по тому, как с полями этого типа взаимодействуют формы, поле данного типа содержит идентификаторы записей адресатов в их таблицах, но их больше одного, и само поле не является идентификатором (хотя содержит его). @Enot Вы, безусловно, умны, раз имеете такое количество плашек и статус модера, но я постил сюда сообщение не потому, что меня в гугле забанили.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
По умолчанию к контакту/компании/лиду цепляется по 2 адреса. Полей много, но ничего не поделаешь - таков базовый функционал. Если это стандартный функционал, то, да, наркоманы редкостные - корпорация Майкрософт. Цитата: 
	
Цитата: 
	
Всё справедливо. Артём действительно один из самых талантливых консультантов-разработчиков, которых я знаю. 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я бы помог вам с запросом, но, к сожалению, сейчас нет доступа к живой системе. Возьмите один из стандартных отчетов по Действиям, загрузите его, откройте в студии и посмотрите как устроен запрос. Ничего особо хитрого вы там не найдете. 
		
		
		
		
		
		
			Если кратко: есть родительская сущность (таблица) Дествие, есть таблица-перемечение activityparty, в которой указаны сылки на стороны Действия, их тип, и, кажется, поле привязки. Иными словами получается селект аля: Выбери все действия, на котрые ссылается сторона действия, тип связи которой - пользователь (systemuser) и поле связи - "to", причем systemuserid = {guid}. Как-то так. Пишу по памяти, так что могу в чем-то ошибаться. В любом случае, как сказал Андрей, информация о том как устроены Действия есть в SDK, так что было бы желание, а разобраться - дело времени. p.s. В известных мне породах SQL синтаксиса нет конструкций вида атрибут[порядковый номер]. Мой сарказм был обращен на это. Это я к тому, что не стоит сразу обзывать наркоманами тех людей, чей замысел вы не поняли. Вот когда поймете - тогда да, обзывайтесь.  
		
				__________________ 
		
		
		
		
	http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]()   MS Certified Dirty Magic Professional
			 | 
| 
	
 | 
| 
			
			 | 
		#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 я знаю лишь в общих чертах. знаю про пару видов джойнов, апдейты, делиты и инсерты, и то со словарем в лице гугла. Однако что делать с данной бедой, гугл, к сожалению, не сообщает (либо приводит сэмплы обращений к бд мало того что из шарпа или бейсика, так еще и к базе в файле)  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот вы знаете, три раза писал ответ и трижды его стирал... Вам правда повезло, что я не ответил
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]()   MS Certified Dirty Magic Professional
			 | 
| 
	
 | 
| 
			
			 | 
		#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, список сторон | 
| 
	
	 | 
	
		
  |