17.07.2008, 05:51 | #1 |
китайский стажер
|
Внутренний аудит изменений кода (DAX 4)
Нужен отчетик по тому, какие объекты менялись, когда, кем и желательно знать с каким проектом это связано.
Интернет на эту тему молчит (или ищу плохо...). Единственное упоминание: здесь, но я пока не понимаю как он это сделал. Может кто-нибудь даст дельный совет? Спасибо! |
|
17.07.2008, 08:47 | #2 |
Мрачный тип
|
А он там ничего и не сделал вообще-то ...
Наивный чукотский мальчик из отсюда попытался logging включить на файле пользовательского слоя и с его помощью отследить изменения на этом файле и строить отчет по этим изменениям. Ему невдомек , что файл в хранилище приложения может изменяться не сразу, как нажали кнопку "сохранить". Плюс отсуствие инфы о пользователе, сделавшем изменение, в принципе имеет место быть - менять будет AOS, запущенный под специальной учеткой. Тупиковый вариант, без вариантов. Вот если бы класс TreeNode не был закрыт, то модифицировав его методы по работе с AOT можно было бы вести некое журналирование. Но в нашей ситуации - IMHO нерешаемо
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 17.07.2008 в 08:55. |
|
17.07.2008, 08:52 | #3 |
Участник
|
Цитата:
каждое изменение объектов будет проходить процедуру checkin/checkout в VSS. В 4ке реализовано не очень хорошо. В 5ке развили эту идею. |
|
|
За это сообщение автора поблагодарили: Qaz Qwerty (1). |
18.07.2008, 05:39 | #4 |
китайский стажер
|
mazzy, спасибо, появился повод посмотреть в сторону VSS... Пока ничего не понятно, но может шеф даст указ разобраться.
Пока получился вот такое текст: X++: UtilElements _UtilElements; Issi_utilversionwritetrack tmptable; treenode node; TimeOfDay TimeFrom, TimeTo; ; #OCCRetryCount if (! this.validate()) throw error(""); try { // ttsbegin; if ( DateFrom <= str2date('01-01-1901',123) && DateTo <= str2date('01-01-1901',123)) { DateFrom = systemdateget(); DateTo = systemdateget(); TimeFrom = timenow() - 360; TimeTo = timenow(); } else { TimeFrom = str2time('00:00:00'); TimeTo = str2time('23:59:59'); } while select _utilelements where ((_utilElements.CreatedDate <= DateTo && _utilElements.CreatedDate >= DateFrom ) && (_utilElements.CreatedTime <= TimeTo && _utilElements.CreatedTime >= TimeFrom )) || (( _utilElements.ModifiedDate <= DateTo && (_utilElements.ModifiedDate >= DateFrom ) && (_utilElements.ModifiedTime <= TimeTo && _utilElements.ModifiedTime >= TimeFrom )) ) { tmptable.RecordType = enum2Value(_utilElements.RecordType); tmptable.Name = _utilElements.Name; tmptable.ParentId = utilElements.ParentId; tmptable.parentName = xUtilElements::parentName(_utilElements); tmptable.SaveCount = _utilElements.SaveCount; tmptable.Version = _utilElements.version; tmptable.BaseVersion = _utilElements.baseVersion; tmptable.UtilLevel = enum2Value(_utilElements.utilLevel); node = xUtilElements::getnode(_utilElements); tmptable.Path = (node)?node.treeNodePath():''; if ( _utilElements.ModifiedBy == '') tmptable.UtilModifiedBy = _utilElements.CreatedBy; else tmptable.UtilModifiedBy = _utilElements.ModifiedBy; if ( (_utilElements.ModifiedDate) <= str2date('01-01-1901',123)) tmptable.UtilModifiedDate = _utilElements.CreatedDate; else tmptable.UtilModifiedDate = _utilElements.ModifiedDate; if ( (_utilElements.ModifiedTime) == str2time('00:00:00')) tmptable.UtilModifiedTime = _utilElements.CreatedTime; else tmptable.UtilModifiedTime = _utilElements.ModifiedTime; tmptable.UtilRecId = _utilElements.RecId; tmptable.insert(); } |
|
04.08.2008, 14:41 | #5 |
Участник
|
Цитата:
Если о DAX4 и выше, то смотрите в сторону VSS.
|
|
04.08.2008, 14:54 | #6 |
Гость
|
|
|
04.08.2008, 15:01 | #7 |
MCT
|
Цитата:
А в какую сторону смотреть в DAX3 ??
|
|
Теги |
ax4.0 |
|
|