Edit a row in a table in Nextcloud Tables

Script nextcloud Verified

by marcel klehr12 · 9/2/2024

The script

Submitted by nextcloud Bun
Verified 86 days ago
1
import createClient, { type Middleware } from "openapi-fetch";
2

3
export async function main(
4
  nextcloud: RT.Nextcloud,
5
  rowId: number,
6
  columnId: number,
7
  value: string,
8
) {
9

10
  const client = createClient<paths>({ baseUrl: nextcloud.baseUrl });
11
  const authMiddleware: Middleware = {
12
    async onRequest({ request, options }) {
13
      // fetch token, if it doesn’t exist
14
      // add Authorization header to every request
15
      request.headers.set("Authorization", `Basic ${btoa((nextcloud.userId) + ':' + nextcloud.token)}`);
16
      return request;
17
    },
18
  };
19
  client.use(authMiddleware);
20

21
  try {
22

23
    const resp = await client.PUT("/index.php/apps/tables/api/1/rows/{rowId}", {
24
      params: {
25
        header: {
26
          "OCS-APIRequest": true,
27
        },
28
        query: {
29
          format: "json",
30
        },
31
        path: {
32
          rowId: rowId,
33
        },
34

35
      },
36
      body: {
37
        data: {
38
          [columnId]: value,
39
        }
40
      },
41
    });
42

43
    console.debug('RESPONSE', resp.data)
44

45
    return {
46

47
      [columnId]: value,
48

49
    }
50

51
  } catch (e) {
52

53
    console.debug('error', e)
54

55
  }
56

57
  return {}
58

59
}
Other submissions
  • Submitted by marcel klehr12 Deno
    Created 568 days ago
    1
    import * as wmill from "npm:windmill-client@1"
    2
    import axios from "npm:axios"
    3
    
    
    4
    export async function main(
    5
      nextcloudResource: string,
    6
      userId: string|null = null,
    7
      rowId: number, 
    8
      columnId: number, 
    9
      value: string,
    10
      useAppApiAuth: boolean = false,
    11
    ) {
    12
      const ncResource = await wmill.getResource(
    13
        nextcloudResource,
    14
      );
    15
    
    
    16
      const data = {
    17
        data: {
    18
          [columnId]: value,
    19
        }
    20
      }
    21
      const url = ncResource.baseUrl + '/index.php/apps/tables/api/1/rows/' + rowId
    22
      const config = {
    23
        ...(!useAppApiAuth && ({
    24
          auth: {
    25
            username: ncResource.username,
    26
            password: ncResource.password,
    27
          },
    28
        })),
    29
        headers: {
    30
          'content-type': 'application/json',
    31
          'ocs-apirequest': true,
    32
          ...(useAppApiAuth && ({
    33
            "AA-VERSION": "2.3.0",
    34
            "EX-APP-ID": "flow",
    35
            "EX-APP-VERSION": "1.0.0",
    36
            "AUTHORIZATION-APP-API": btoa(
    37
              `${userId || ncResource.username}:${ncResource.password}`,
    38
            ),
    39
        })),
    40
        },
    41
      }
    42
      console.debug('config', config)
    43
      try {
    44
        const resp = await axios.put(url, data, config)
    45
        console.debug('RESPONSE', resp.data)
    46
        return {
    47
          data
    48
        }
    49
      } catch(e) {
    50
        console.debug('error', e)
    51
      }
    52
      
    53
      
    54
      return {}
    55
    }