| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			buf2con() -> GlobalCache -> con2Buf()
			 
			
			AX 2012 R2 
		
		
		
		
		
		
		
	Обнаружил, что класс Common запакованный в контейнер при помощи метода buf2con() и помещенный внутрь GlobalCash не распаковыватся обратно в запись. Контейнер "порится" в GlobalCash. А у вас, код ниже, работает правильно? X++: #Define.Key('Key') Common record; container recordCon; ClassFactory.globalCache().set(curUserId(), #Key, buf2con(record)); recordCon= ClassFactory.globalCache().get(curUserId(), #Key, conNull()); record = con2Buf(recordCon);  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Код работает правильно, если перед помещением в кэш буфер типа Common инициализировать чем-нить осмысленным - иначе какой толк его кэшировать?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Morpheus (3). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Источник проблемы выявить и устранить не удалось. А класс SysGlobalobjectCache работает исправно.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Таблица, чей буфер кэшируется, использует наследование? Как именно вообще проявляется  то, что контейнер "портится"? Как он выглядит до помещения в кэш и после извлечения? Ситуация несколько странная, поскольку в SysGlobalCache используется обычный Map, где в данном случае контейнер хранится в качестве значения. Я вот с ходу не припомню случаев, чтобы Map как-либо портил положенный в него контейнер. Может, дело в распаковке?.. 
		
		
		
		
		
		
		
		
			PS. В вашем примере используется classFactory, т.о. может использоваться два независимых SysGlobalCache'а в зависимости от того, где выполняется код. Может, дело в этом? Может, код кладет контейнер, скажем, в клиентский SysGlobalCache, а затем другой код пытается извлечь его из серверного SysGlobalCache и просто не находит там? Последний раз редактировалось gl00mie; 20.02.2015 в 16:32.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вы пробовали не помещая в кэш контейнер сразу после упаковки распаковать. Получается? Т.е. точно ли проблема в кэше?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня тоже отрабатывает корректно. Во всяком случае после упаковки и распаковки InventTable (сконвертированной как у тебя в Common, запакованной, помещенной в глобал кэш, вытянутой из него, распакованной, присвоенной другой переменной Common), значение (fieldNum(InventTable, ItemId)) выводится правильно. 
		
		
		
		
		
		
			
		
		
		
		
	6.3 последняя версия  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Может инсталляция АХ повреждена?  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			SysGlobalCache - это Map со значениями в виде других Map'ов, которые привязаны к строке, идентифицирующей владельца (owner) и чей тип значений определяется первой вставкой. Может, вы используете идентификатор владельца кэша, для которого также используются значения  отличных от контейнера типов либо ключи разных базовых типов (целочисленный, строковый, еще какой)? И Map'у, и SysGlobalCache - сто лет в обед, и все их проблемы и особенности давно известны - вряд ли в 2012-й что-то такое наворотили, что вдруг стали проявляться глюки, которых раньше не было и которые почему-то воспроизводятся не у всех.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| Теги | 
| buf2con, con2buf | 
| 
	
	 | 
	
		
  |