如何将Notes文档链接转换为HTML链接

时间:2017-10-18 20:29:39

标签: lotus-notes lotus-domino lotus

我负责维护一些旧代码,我们在其中从邮件中提取Notes链接,并将其转换为可在本地计算机(安装了Notes)上从HTML调用的链接。我们的情况是一个链接起作用,而另一个链接起作用。

我很难理解这段代码究竟是做什么的,以及为什么它甚至可以起作用。基本上,我们正在查看电子邮件中的“$ Links”属性。例如,在Notes中查看时,此属性的值类似于:

function apd_product_custom_price($cart_item_data, $product_id)
{
    if (isset($_POST['use_rewards']) && !empty($_POST['use_rewards'])) 
    {
       $cart_item_data['use_rewards'] = $_POST['use_rewards'];
    }
    return $cart_item_data;
}

add_filter('woocommerce_add_cart_item_data', 'apd_product_custom_price', 99, 2);

function apd_apply_custom_price_to_cart_item($cart_object)
{
   if( !WC()->session->__isset( 'reload_checkout' )) {
        foreach ($cart_object->cart_contents as $value) {
            if(isset($value['use_rewards'])) {
                $price = $value['data']->get_price() - 
   $value['use_rewards'];
                $value['data']->set_price($price);
            }
        }
    }

}
add_action('woocommerce_before_calculate_totals', 'apd_apply_custom_price_to_cart_item',10);

我们的代码所做的是使用NSFItemInfo和OSLockBlock获取此属性的二进制值。然后它从偏移量11开始,向后工作8个字节,将每个字节转换为2位十六进制值。然后它再做同样的事情3次,但是从原始11开始向前移动8个字节。在这8个字节段的第1个和第3个之后插入一个'/'字符。然后整个事情被附加到“notes:///”。最后,生成的链接如下所示:

RFC2257F23:004852B9
VFA5208C4C:6552DA01-VN422569FB:003AAC2D
NF6D24A297:6579B8E3-NNC225805D:004D8678

我猜这个值代表了文档链接的Notes UNID,当点击时,它代表了Notes 启动,直接进入文档。那么,是否有人知道为什么一个链接可以工作,并且 另一个失败了?我们的客户声称Notes链接数据库完好无损,可以成功查看 来自Notes本身。

1 个答案:

答案 0 :(得分:1)

Notes-链接由协议,服务器部分,数据库部分和数据库中的元素组成。

一个正常的例子是:

注释://server/path/database.nsf/view/keytodocumentinview

每个部分(服务器除外)都可以用内部ID替换。

  • path / database.nsf - >副本ID(在您的示例中为C2257F23004852B9)
  • view - >视图设计元素的通用ID(A5208C4C6552DA01422569FB003AAC2D)
  • keytodocumentinview - >文件的通用ID(6D24A2976579B8E3C225805D004D8678)

如果链接中没有服务器,那么Notes客户端会尝试"猜测"合适的服务器。它检查:

  1. 桌面上是否有请求副本ID的图标。如果是:请使用上次使用的副本的服务器(如果副本堆叠在顶部)
  2. 我可以找到catalog.nsf(在位置文档或来自邮件主页服务器的目录服务器上。如果是:是否有副本?如果是:从那里取出服务器...... < / LI>
  3. 询问用户服务器(不确定该部分,因为似乎并不总是这样)
  4. 所以问题的答案是:

    如果客户端找不到对服务器的任何引用,则该链接将不起作用。 因此,最好将正确的服务器添加到链接中(如果您知道的话)。

    只是为了解释,如何从一种形式到另一种形式,这里有更多的解释:

    有时这些ID的表示方式与$ Links- Item:

    中的ID不同

    第一个字母代表&#34; Type&#34; ID:

    R =副本ID V =查看通用ID N =注意通用ID

    所有32位值分为16位的2个半部分,前面是另一个字符,告诉&#34; First&#34; (F)或&#34;第二&#34; (= Next,N)值。

    其余部分分为8个字母,第一个和第三个八位字节用冒号分隔,上半部分和后半部分用减号分开。

    就像你可以很容易看到的那样:

    RFC2257F23:004852B9 转换为 FC2257F23004852B9

    VFA5208C4C:6552DA01-VN422569FB:003AAC2D 转换为 A5208C4C 6552DA01 422569FB 003AAC2D

    NF6D24A297:6579B8E3-NNC225805D:004D8678 转化为 6D24A297 6579B8E3 C225805D 004D8678