Страница 1 из 1

Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Пт янв 15, 2016 4:41 pm
rustambek
Здравствуйте.

В процессе эксплуатации возник вопрос, как получить список пользователь из MyChat в разрезе профиля?
Т.е. у кого какие поля заполнены, кто в каких группах, имеется ли фото в профиле и т. д.
MyChat используем как корпоративный мессенджер, профили пользователей после выгрузки из AD допиливают админы в ручную. Бывает где то, что то упускают, проверить ни как. При численности около 200 пользователей прокликывать каждый профиль не реально.
Как можно сделать такую выгрузку? Может есть дугой инструмент?

Re: Как выгрузить параметры пользователей?

СообщениеДобавлено: Пт янв 15, 2016 4:57 pm
Андрей Раков
Добрый день.

К сожалению такого инструмента нету. Как вариант, мы можем создать в разделе скриптов специальный раздел для скриптов, которые не выполняются по расписанию или на события, а только вручную.

Там можно будет сделать выгрузку любых данных о пользователях в файл, постараемся сделать это в готовящейся версии.

Re: Как выгрузить параметры пользователей?

СообщениеДобавлено: Пн янв 18, 2016 7:11 am
rustambek
Здравствуйте.

Меня вполне устроит такой вариант.
А нельзя ли выслать скипт сейчас? Пока выйдет новая версия готовы запускать его в ручном режиме, хоть из командной строки.

Re: Как выгрузить параметры пользователей?

СообщениеДобавлено: Вт янв 19, 2016 12:32 pm
Алексей Пикуров
Я не уверен, что нужные функции есть в API скриптового движка в данный момент. Попробую написать скрипт и отвечу в этой теме.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Пт фев 19, 2016 3:22 pm
Алексей Пикуров
Итак, скрипт сделан, он будет идти в стандартном дистрибутиве MyChat Server.

Под него сделан специальный раздел "Library" — "Service".

Выглядит вот так:

checkemptyusersfieldsscript-small.png


По умолчанию данные экспортируются в файл "c:\temp\users_report.csv", можете изменить значение константы EXPORT_FILE_NAME. В файл экспорта попадают только те пользователи, по которым не хватает каких-либо заполненных данных.

Что проверять — тоже можно изменить, есть три набора данных, регулируется константой CHECK_WHAT:
"<COMMON>" — стандартные поля;
"<WORK>" — данные о работе;
"<HOME>" — домашний адрес, телефоны и прочее.

После того, как скрипт отработает, просто открывайте файл в Excel и сортируйте, как душе угодно:

userslistinexcel-small.png


Работает достаточно быстро, на нашей базе данных на 4 306 пользователей скрипт отработал за 12 секунд. Можно его ещё пооптимизировать, но, думаю, у вас всё будет значительно быстрее :)

Ожидайте новую версию, уже скоро.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Вт мар 01, 2016 7:25 am
rustambek
Здравствуйте, Алексей.

Спасибо за реализацию этого вопроса. После обновления сервера до последней версии обязательно воспользуюсь этим скриптом

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср мар 02, 2016 8:46 am
rustambek
Добрый день, Алексей.

Скрипт не работает, точнее он отрабатывает но результата в виде файла нет.
[10:55:49] (Run "CheckEmptyUsersFields"): Время выполнения скрипта: 760 мс
[10:55:49] (Run "CheckEmptyUsersFields"): Скрипт выполнен успешно.
Файла c:\temp\users_report.csv нет.
Менял место выгрузки, не помогло.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср мар 02, 2016 9:13 am
Алексей Пикуров
Здравствуйте, Рустамбек.

Если папка c:\temp существует, тогда получается ошибка в скрипте где-то, который "спотыкается" на ваших данных в каком-то месте.

Можете переслать бекап своей базы на [email protected] ?

Я прогоню скрипт на ней под отладчиком и посмотрю, в чём может быть дело.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср мар 02, 2016 2:52 pm
Алексей Пикуров
Рустам, получил вашу базу, скрипт работает отлично, файл формируется, никаких проблем.

Могу подключиться к вам удалённо, глянуть, мало ли.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср мар 02, 2016 4:25 pm
rustambek
Алексей, большое спасибо за уделенное время и удаленное подключение.
Проблема была не в скрипте. Результат работы скрипта я ожидал в c:\temp\ своего компьютера, а нужно было в c:\temp\ сервера MyChat [smilie=biggrin.gif]

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт мар 10, 2016 1:37 pm
Алексей Пикуров
Статья по теме: https://nsoft-s.com/mychatarticles/1033 ... ofili.html

Можно расшарить в соцсетях, людям будет полезно.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт май 12, 2016 8:57 am
rustambek
Здравствуйте.

Помогите разобраться, запускаю скрипт, все хорошо отрабатывает, но в результатах не все пользователи у которых есть не заполненные данные.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт май 12, 2016 10:05 am
Алексей Пикуров
Добрый день.

Покажите конкретный пример, приложите базу данных, по вашему сообщению неясно, что конкретно работает не так, как вы ожидали.

На [email protected]

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт май 12, 2016 10:17 am
rustambek
Вы можете к нам подключится, так будет проще?

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт май 12, 2016 10:18 am
Алексей Пикуров
Позже, сейчас занят. Лучше на почту или в форуме.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Чт май 12, 2016 10:39 am
rustambek
Выслал на почту ссылку для скачивания.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Пт май 13, 2016 3:04 pm
rustambek
Здравствуйте
Как там мой вопрос?

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Пн май 16, 2016 10:24 am
Алексей Пикуров
Добрый день, письмо ваше есть, ещё не смотрели, постараюсь на этой неделе глянуть, отвечу в этой теме.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Пн май 16, 2016 2:41 pm
Алексей Пикуров
Я выполнил ваш скрипт на базе, что вы предоставили, на последней версии сервера, 5.19.3, в списке есть те люди, о которых вы говорите. Результат работы скрипта отправил письмом.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 18, 2016 7:41 am
rustambek
Здравствуйте.

Обновились до последней версии, запускаю скрипт, он отрабатывает, но в результатах опять не все пользователи у которых есть не заполненные данные.
Может скрипт цепляется не к той базе? Не знаю что предположить.
Прошу помочь разобраться.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 18, 2016 7:52 am
Алексей Пикуров
Давайте я к вам подключусь в 11 по Киеву через TeamViewer или AmmyAdmin. Стукните мне в чате по линку в подписи.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 18, 2016 9:17 pm
rustambek
Алексей, большое спасибо, после переустановки серверной части по вашей ссылке, все заработало. [smilie=good.gif]

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 18, 2016 9:22 pm
Алексей Пикуров
Пожалуйста :)

viewtopic.php?p=22728#p22728

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 12, 2021 10:54 am
AlexSun
Добрый день. Скрипт похоже старый, не работает, пишет ошибку:
AddLineToFile(sTitle, EXPORT_FILE_NAME); --> [10:53:57] (Error "CheckEmptyUsersFields"): [Error] (55:42): Invalid number of parameters

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 12, 2021 1:35 pm
Алексей Пикуров
Здравствуйте. Замените пожалуйста функцию AddLineToFile на правильную, в справке есть описание. Последний, третий параметр 0, тип кодировки при сохранении.

Re: Как выгрузить параметры пользователей? Нужно получить список людей, у которых профиль заполнен не полностью

СообщениеДобавлено: Ср май 12, 2021 1:51 pm
Алексей Пикуров
Код: Выделить всё
// CheckEmptyUsersFields service script
//------------------------------------------------------------------------------------
// If you have users with empty fields, you can export full list of them to a CSV file
// and analyze it in Excel.
// -----------------------------------------------------------------------------------
// ver 1.1 / May 12, 2012, (c) Alexey Pikurov, [email protected]
// ver 1.2 / Jun 18, 2021, (c) Alexey Pikurov, [email protected]
// help (russian) - https://www.nsoft-s.com/forum/viewtopic.php?f=1&t=4129
//------------------------------------------------------------------------------------
const
  EXPORT_FILE_NAME      = 'c:\temp\users_report.csv';
 
  CHECK_WHAT            = '<COMMON>,<WORK>,<HOME>';
 
  COMMON_FIELDS_MIN_SET = 'FirstName;MiddleName;LastName;Birthday;Sex;Avatar;';
  WORK_FIELDS_SET       = 'Email;WorkPosition;WorkCompanyName;WorkOffice;WorkPhone;WorkFax;' +
                          'WorkPager;WorkStreetAddress;WorkCity;WorkState;WorkZIP;WorkCountry;WorkWWW;';
  HOME_FIELDS_SET       = 'MaritalStatus;HomePhone;HomeFax;HomeCellular;HomeStreetAddress;HomeCity;HomeState;HomeZIP;HomeCountry;HomeWWW;';
 
function CheckDate(dt: double): boolean;
var
  iYears: integer;
begin
  iYears := YearsBetween(Now, dt);
 
    if (iYears > 100) or (iYears < 16) then result := false
      else result := true;
end;

var
  sUsersList, sJSON, sOut, sUserData, sTitle,
  sNick, sFirstName, sMiddleName, sLastName, sBirthday, sSex, sPhoto,
  sEmail, sWorkPosition, sWorkCompanyName, sWorkOffice, sWorkPhone, sWorkFax,
  sWorkPager, sWorkStreetAddress, sWorkCity, sWorkState, sWorkZIP, sWorkWWW,
  sWorkCountry, sMaritalStatus, sHomePhone, sHomeFax, sHomeCellular,
  sHomeStreetAddress, sHomeCity, sHomeState, sHomeZIP, sHomeCountry, sHomeWWW: string;
 
  iMaritalStatus, iHomeCountry, iUIN, iSex, iWorkCountry, iAvatar: integer;
 
  dtBirthday: double;
  bFlag: boolean;
begin
  SetScriptTimeOut(20000);

  sUsersList := mGetUINSListByRole(-1);

  DeleteFile(EXPORT_FILE_NAME);
 
  sOut   := '';
  sTitle := 'UIN;Nick;';
 
    if pos('<COMMON>', CHECK_WHAT) <> 0 then sTitle := sTitle + COMMON_FIELDS_MIN_SET;
    if pos('<WORK>', CHECK_WHAT) <> 0 then sTitle := sTitle + WORK_FIELDS_SET;
    if pos('<HOME>', CHECK_WHAT) <> 0 then sTitle := sTitle + HOME_FIELDS_SET;
 
  AddLineToFile(sTitle, EXPORT_FILE_NAME, 0);     
 
    while length(sUsersList) > 0 do begin
      bFlag := false;
     
      iUIN := StrToInt(GetNextSt(sUsersList, ','));
      sJSON := mGetUserDataAsJSON(iUIN, 'Nick;' + COMMON_FIELDS_MIN_SET + WORK_FIELDS_SET + HOME_FIELDS_SET);
     
      JSONGetString(sJSON, 'Nick', sNick);
     
      sUserData := inttostr(iUIN) + ';' +
                   DecorateStForCSV(sNick) + ';';
// COMMON -----------------------------------------------------------------------------------------     
        if pos('<COMMON>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'FirstName', sFirstName);
          JSONGetString(sJSON, 'MiddleName', sMiddleName);
          JSONGetString(sJSON, 'LastName', sLastName);
          JSONGetDateTime(sJSON, 'Birthday', dtBirthday);
     
            if CheckDate(dtBirthday) then sBirthday := FormatDateTime('dd.mm.yyyy', dtBirthday)
              else sBirthday := '';

          JSONGetInteger(sJSON, 'Sex', iSex);
     
            case iSex of
              0: sSex := '';
              1: sSex := 'male';
              2: sSex := 'female';
            end;
       
          JSONGetInteger(sJSON, 'Avatar', iAvatar);
     
      if iAvatar = 0 then sPhoto := '' else sPhoto := 'yes';
     
            if (length(sFirstName) = 0) or (length(sMiddleName) = 0) or (length(sLastName) = 0) or
               (length(sBirthday) = 0) or (length(sSex) = 0) or (length(sPhoto) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sFirstName) + ';' +
                       DecorateStForCSV(sMiddleName) + ';' +
                       DecorateStForCSV(sLastName) + ';' +
                       DecorateStForCSV(sBirthday) + ';' +
                       sSex + ';' +
                       sPhoto + ';';
        end;                   
// WORK --------------------------------------------------------------------------------------------                 
        if pos('<WORK>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'Email', sEmail);
          JSONGetString(sJSON, 'WorkPosition', sWorkPosition);
          JSONGetString(sJSON, 'WorkCompanyName', sWorkCompanyName);
          JSONGetString(sJSON, 'WorkOffice', sWorkOffice);
          JSONGetString(sJSON, 'WorkPhone', sWorkPhone);
          JSONGetString(sJSON, 'WorkFax', sWorkFax);
          JSONGetString(sJSON, 'WorkPager', sWorkPager);
          JSONGetString(sJSON, 'WorkStreetAddress', sWorkStreetAddress);
          JSONGetString(sJSON, 'WorkCity', sWorkCity);
          JSONGetString(sJSON, 'WorkState', sWorkState);
          JSONGetString(sJSON, 'WorkZIP', sWorkZIP);
          JSONGetInteger(sJSON, 'WorkCountry', iWorkCountry);
     
            if iWorkCountry = 0 then sWorkCountry := ''
              else sWorkCountry := 'yes';
                   
          JSONGetString(sJSON, 'WorkWWW', sWorkWWW);
     
            if (length(sEmail) = 0) or (length(sWorkPosition) = 0) or (length(sWorkCompanyName) = 0) or
               (length(sWorkOffice) = 0) or (length(sWorkPhone) = 0) or (length(sWorkFax) = 0) or
               (length(sWorkPager) = 0) or (length(sWorkStreetAddress) = 0) or (length(sWorkCity) = 0) or
               (length(sWorkState) = 0) or (length(sWorkZIP) = 0) or (length(sWorkCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sEmail) + ';' +
                       DecorateStForCSV(sWorkPosition) + ';' +
                       DecorateStForCSV(sWorkCompanyName) + ';' +
                       DecorateStForCSV(sWorkOffice) + ';' +
                       DecorateStForCSV(sWorkPhone) + ';' +
                       DecorateStForCSV(sWorkFax) + ';' +
                       DecorateStForCSV(sWorkPager) + ';' +
                       DecorateStForCSV(sWorkStreetAddress) + ';' +
                       DecorateStForCSV(sWorkCity) + ';' +
                       DecorateStForCSV(sWorkState) + ';' +
                       DecorateStForCSV(sWorkZIP) + ';' +
                       DecorateStForCSV(sWorkCountry) + ';' +
                       DecorateStForCSV(sWorkWWW) + ';';
        end;                   
// HOME -------------------------------------------------------------------------------------------     
        if pos('<HOME>', CHECK_WHAT) <> 0 then begin
          JSONGetInteger(sJSON, 'MaritalStatus', iMaritalStatus);
         
            if iMaritalStatus = -1 then sMaritalStatus := '' else sMaritalStatus := 'yes';
           
          JSONGetString(sJSON, 'HomePhone', sHomePhone);
          JSONGetString(sJSON, 'HomeFax', sHomeFax);
          JSONGetString(sJSON, 'HomeCellular', sHomeCellular);
          JSONGetString(sJSON, 'HomeStreetAddress', sHomeStreetAddress);
          JSONGetString(sJSON, 'HomeCity', sHomeCity);
          JSONGetString(sJSON, 'HomeState', sHomeState);         
          JSONGetString(sJSON, 'HomeZIP', sHomeZIP);
          JSONGetInteger(sJSON, 'HomeCountry', iHomeCountry);
         
            if iHomeCountry = -1 then sHomeCountry := '' else sHomeCountry := 'yes';         
           
          JSONGetString(sJSON, 'HomeWWW', sHomeWWW);
     
            if (length(sMaritalStatus) = 0) or (length(sHomePhone) = 0) or (length(sHomeFax) = 0) or
               (length(sHomeCellular) = 0) or (length(sHomeStreetAddress) = 0) or (length(sHomeCity) = 0) or
               (length(sHomeState) = 0) or (length(sHomeZIP) = 0) or (length(sHomeCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sMaritalStatus) + ';' +
                       DecorateStForCSV(sHomePhone) + ';' +
                       DecorateStForCSV(sHomeFax) + ';' +
                       DecorateStForCSV(sHomeCellular) + ';' +
                       DecorateStForCSV(sHomeStreetAddress) + ';' +
                       DecorateStForCSV(sHomeCity) + ';' +
                       DecorateStForCSV(sHomeState) + ';' +
                       DecorateStForCSV(sHomeZIP) + ';' +
                       DecorateStForCSV(sHomeCountry) + ';';
        end;                   
// -------------------------------------------------------------------------------------------------
      if bFlag then sOut := sOut + sUserData + #13#10;
    end;
   
  AddLineToFile(sOut, EXPORT_FILE_NAME, 0);   
end.