code: def get_item_sh(self, item, roles=None, date_field=None):
          eitem_sh = {}
          author_field = self.get_field_author()
          if not roles:
              roles = [author_field]
          if not date_field:
              item_date = str_to_datetime(item[self.get_field_date()])
          else:
              item_date = str_to_datetime(item[date_field])
          users_data = self.get_users_data(item)
          for rol in roles:
              if rol in users_data:
                  identity = self.get_sh_identity(item, rol)
                  eitem_sh.update(self.get_item_sh_fields(identity, item_date, rol=rol))
                  if not eitem_sh[rol + '_org_name']:
                      eitem_sh[rol + '_org_name'] = SH_UNKNOWN_VALUE
                  if not eitem_sh[rol + '_name']:
                      eitem_sh[rol + '_name'] = SH_UNKNOWN_VALUE
                  if not eitem_sh[rol + '_user_name']:
                      eitem_sh[rol + '_user_name'] = SH_UNKNOWN_VALUE
          rol_author = 'author'
          if author_field in users_data and author_field != rol_author:
              identity = self.get_sh_identity(item, author_field)
              eitem_sh.update(self.get_item_sh_fields(identity, item_date, rol=rol_author))
              if not eitem_sh['author_org_name']:
                  eitem_sh['author_org_name'] = SH_UNKNOWN_VALUE
              if not eitem_sh['author_name']:
                  eitem_sh['author_name'] = SH_UNKNOWN_VALUE
              if not eitem_sh['author_user_name']:
                  eitem_sh['author_user_name'] = SH_UNKNOWN_VALUE
          return eitem_sh